ReadMultiTimesException.cxx
/*=========================================================================
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 &ba)
{
(void)ba;
std::cerr << "BAD ALLOC Exception caught!" << std::endl;
}
catch (...)
{
std::cerr << "Exception caught!" << std::endl;
}
}
return 0;
}
gdcm::Bitmap::GetBufferLength
unsigned long GetBufferLength() const
gdcm::Bitmap::GetBuffer
bool GetBuffer(char *buffer) const
Access the raw data.
gdcm::ImageReader
ImageReader.
Definition gdcmImageReader.h:34
gdcm::ImageReader::GetImage
const Image & GetImage() const
Return the read image.
gdcm::ImageReader::Read
bool Read() override
gdcm::Image
Image.
Definition gdcmImage.h:47
gdcm::Reader::SetFileName
void SetFileName(const char *filename_native)
gdcmImageReader.h