1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
/*=========================================================================
Program: GDCM (Grassroots DICOM). A DICOM library
Copyright (c) 2006-2011 Mathieu Malaterre
All rights reserved.
See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// The intention of this sample program is to provoke bad_alloc exceptions in gdcm code
#include "gdcmImageReader.h"
int main(int argc, char* argv[])
{
// We pre-allocate some memory (about 1Gb) to help the issue to show up earlier
char *dummyBuffer = new char[1024*1024*1100]; (void)dummyBuffer;
// Check the number of parameters given
if (argc < 3)
{
std::cerr << "Usage: " << argv[0] << " Filename numberOfTries" << std::endl;
return 1;
}
std::cout << "We are going to read the file: " << argv[1] << " " << argv[2] << " times" << std::endl;
// We hold the pointers in an array to avoid the memory to be released
// We read the input file n-times
for (int i = 0; i < atoi(argv[2]); ++i)
{
gdcm::ImageReader reader;
std::cout << "Reading try: " << i << std::endl;
// Read files
reader.SetFileName(argv[1]);
try
{
reader.Read();
gdcm::Image & img = reader.GetImage();
unsigned long len = img.GetBufferLength();
char *buffer = new char[ len ];
img.GetBuffer( buffer ); // do NOT de-allocate buffer !
}
catch (std::bad_alloc)
{
std::cerr << "BAD ALLOC Exception caught!" << std::endl;
}
catch (...)
{
std::cerr << "Exception caught!" << std::endl;
}
}
return 0;
}
|