[Insight-users] Malloc errors with repeated image IO??

Zachary Pincus zpincus at stanford.edu
Tue Mar 21 14:20:30 EST 2006


Can anyone confirm that these malloc errors exist for them when  
running the test cases below? I used a variety of tiff images to test  
this, so maybe it is a tiff io problem?

Another possibility is that this task is outside the design range of  
ITK, and there is some better way to read thousands of images off  
disk and into memory?

Any insight into what's going on here would be rather helpful.

Zach



On Mar 19, 2006, at 6:43 PM, Zachary Pincus wrote:

> Hi folks,
>
> In the process of reading in many (!) image files and storing the  
> resulting images away (as Image::Pointer objects in some list or  
> vector), I have run into some strange malloc errors.
>
> Here are some test cases which seem to reproduce these errors. The  
> code for the cases is at the end of this email; here follows  
> descriptions of the tests and the malloc errors produced.
>
> I'm using a CVS checkout of ITK from shortly after the 2.6 release,  
> on OS X 10.4.5. Everything is compiled with GCC 4.0.1.
>
> ******
> Case 0: [BASELINE] In a loop, create an ImageFileReader (and give  
> it a valid file to read), and call Update(). The FileReader is  
> destroyed and created anew each loop.
>
> No errors are produced.
>
>
> ******
> Case 1: In a loop, create an ImageFileReader, call Update(), and  
> store the resulting image pointer in a std::vector. The FileReader  
> is destroyed and created anew each loop.
>
> The errors are a flood of identical lines (down to the object  
> address), e.g.:
>> itkTest(18420) malloc: *** error for object 0x7801600: incorrect  
>> checksum for freed object - object was probably modified after  
>> being freed, break at szone_error to debug
>> itkTest(18420) malloc: *** set a breakpoint in szone_error to debug
>
>
> ******
> Case 2: Create an ImageFileReader. In a loop, repeatedly call Update 
> (), store the result away, and call DisconnectPipeline() so that  
> the next loop through, a new image is created.
>
> The error is a few lines similar to those in case 1, and then other  
> errors, culminating in an exception:
>> itkTest(24609) malloc: *** error for object 0x780ee00: incorrect  
>> checksum for freed object - object was probably modified after  
>> being freed, break at szone_error to debug
>> itkTest(24609) malloc: *** set a breakpoint in szone_error to debug
>> itkTest(24609) malloc: ***  Deallocation of a pointer not  
>> malloced: 0x80008; This could be a double free(), or free() called  
>> with the middle of an allocated block; Try setting environment  
>> variable MallocHelp to see tools to help debug
>> TIFFFillStrip: /Users/zpincus/Documents/Research/Theriot Lab/ 
>> Experimental Data/Catherine Keratocytes/Images3/summed/ 
>> 022505_antiV_1.tif: Data buffer too small to hold strip 0.
>>
>> itk::ExceptionObject (0x756ec30)
>> Location: "void itk::TIFFImageIO::ReadGenericImage(void*, unsigned  
>> int, unsigned int)"
>> File: /Users/zpincus/Developer/ITK/Insight/Code/IO/itkTIFFImageIO.cxx
>> Line: 536
>> Description: itk::ERROR: TIFFImageIO(0x7573530): Problem reading  
>> the row: 0
>
> Does anyone have any thoughts as to what could be happening?
>
> Zach Pincus
>
>
>
> CODE FOR CASE 0:
> ----------------
> #include "itkImage.h"
> #include "itkImageFileReader.h"
> #include <iostream>
>
> typedef itk::Image<float, 2> FImage;
> typedef itk::ImageFileReader<FImage> FReader;
>
> int main(int argc, char* argv[] )
> {
>   if (argc < 2) return -1;
>
>   for (int i = 0; i < 1000; i++)
>     {
>       try {
>         FReader::Pointer fr = FReader::New();
>         fr->SetFileName(argv[1]);
>         fr->Update();
>       } catch( itk::ExceptionObject & err ) {
>         std::cout << err << std::endl;
>         return -1;
>       }
>     }
>   return 0;
> }
>
> CODE FOR CASE 1:
> ----------------
> #include "itkImage.h"
> #include "itkImageFileReader.h"
> #include <iostream>
> #include <vector>
>
> typedef itk::Image<float, 2> FImage;
> typedef itk::ImageFileReader<FImage> FReader;
> typedef std::vector<FImage::Pointer> FIPVector;
>
> int main(int argc, char* argv[] )
> {
>   if (argc < 2) return -1;
>
>   FIPVector vec;
>   for (int i = 0; i < 1000; i++)
>     {
>       try {
>         FReader::Pointer fr = FReader::New();
>         fr->SetFileName(argv[1]);
>         fr->Update();
>         vec.push_back(fr->GetOutput());
>       } catch( itk::ExceptionObject & err ) {
>         std::cout << err << std::endl;
>         return -1;
>       }
>     }
>   return 0;
> }
>
> CODE FOR CASE 2:
> ----------------
> #include "itkImage.h"
> #include "itkImageFileReader.h"
> #include <iostream>
> #include <vector>
>
> typedef itk::Image<float, 2> FImage;
> typedef itk::ImageFileReader<FImage> FReader;
> typedef std::vector<FImage::Pointer> FIPVector;
>
> int main(int argc, char* argv[] )
> {
>   if (argc < 2) return -1;
>
>   FIPVector vec;
>   FReader::Pointer fr = FReader::New();
>   fr->SetFileName(argv[1]);
>   for (int i = 0; i < 1000; i++)
>     {
>       try {
>         fr->Update();
>         vec.push_back(fr->GetOutput());
>         fr->GetOutput()->DisconnectPipeline();
>       } catch( itk::ExceptionObject & err ) {
>         std::cout << err << std::endl;
>         return -1;
>       }
>     }
>   return 0;
> }
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users



More information about the Insight-users mailing list