[Insight-developers] Memory exception

Luis Ibanez luis.ibanez at kitware.com
Tue Dec 2 10:56:29 EST 2008



Hi Ivan,


Three suggestions:


A) You can catch "any" exceptions by using:

      catch(...)
        {
        }

     note the "..." inside the parenthesis,
     this is to be used literally.


B) This looks indeed like a memory limitation on your
    machine. However, it is healthy to fully understand
    the problem first.

    Please provide the following information:

     a) How much physical RAM do you have ?
     b) How much virtual memory do you have configured ?
     c) What is the number of pixels in the input slices ?
        (number of pixels along X and along Y).
     d) What is the pixel type of the image ?


C) If you have the TaskManager ON, and the Resource tab ON,
    while you run your program, you should be able to see
    how the memory consumption increases, and... eventually
    if it goes over your available RAM.



Please let us know what you find,


     Thanks


         Luis



---------------------
ivan gm wrote:
> Hi,
> 
> Unfortunately, neither of this option caught the excetion, I think this 
> is happening because the itk pipeline is running under a thread. When 
> the program crash Visual Studio shows the afxtls_.h file in the line 197 
> (Create object funtion). I only get this exception when I use a image of 
> 300 slices. if I use a normal 40 slices-image it runs nice. But my 
> question is, if I increase the RAM or the virtual memory it would solve 
> the problem?
> 
> Thanks a lot.
> 
> 
> On Tue, Nov 25, 2008 at 1:32 PM, Tom Vercauteren 
> <tom.vercauteren at m4x.org <mailto:tom.vercauteren at m4x.org>> wrote:
> 
>     Hi Ivan,
> 
>     You might also want to try catching other types of exceptions. I
>     remember that ITK writers can also throw a std::bad_alloc exception. I
>     guess that other types are also possible...
> 
>     Try this:
>     try{
>      writer->Update();
>     }
>     catch( itk::ExceptionObject & excp ) {
>      std::cerr << "itk::ExceptionObject: " << excp << std::endl;
>     }
>     catch ( std::bad_alloc & excp ){
>      std::cerr << "std::bad_alloc: " << excp.what() << std::endl;
>     }
>     catch ( std::exception & excp ){
>      std::cerr << "std::exception: " << excp.what() << std::endl;
>     }
> 
>     Tom
> 
>     On Tue, Nov 25, 2008 at 12:52 PM, ivan gm <ivan.gm.itk at gmail.com
>     <mailto:ivan.gm.itk at gmail.com>> wrote:
>      > Hello:
>      >
>      > Even with this clause I can't caught the exception. It's very
>     extrange
>      > because if I use the AnalyzeImageIO it works perfectly and with the
>      > GDCMImageIO it fails. In order to give you more information I
>     attach the
>      > stack trace given by dotnet:
>      >
>      >      kernel32.dll!7c812aeb()
>      >      [Los marcos siguientes pueden no ser correctos o faltar, no
>     se han
>      > cargado símbolos para kernel32.dll]
>      >      kernel32.dll!7c812aeb()
>      >>  
>      mfc80d.dll!CThreadLocal<AFX_MODULE_THREAD_STATE>::CreateObject()  Línea
>      >> 198 + 0x47 bytes    C++
>      >      msvcr80d.dll!_CxxThrowException(void *
>     pExceptionObject=0x0ffbd598,
>      > const _s__ThrowInfo * pThrowInfo=0x783c0b6c)  Línea 166    C++
>      >      mfc80d.dll!AfxThrowMemoryException()  Línea 222    C++
>      >      mfc80d.dll!AfxNewHandler(unsigned int __formal=180355072)
>      Línea 304
>      > C++
>      >      mfc80d.dll!operator new(unsigned int nSize=180355072)  Línea
>     360 + 0xd
>      > bytes    C++
>      >      mfc80d.dll!operator new[](unsigned int nSize=180355072)
>      Línea 382 +
>      > 0x9 bytes    C++
>      >      myAplication.exe!itk::GDCMImageIO::Write(const void *
>      > buffer=0x1fb40040)  Línea 1069 + 0xc bytes    C++
>      >    
>      myAplication.exe!itk::ImageFileWriter<itk::OrientedImage<short,3>
>      >>::GenerateData()  Línea 279 + 0x33 bytes    C++
>      >    
>      myAplication.exe!itk::ImageFileWriter<itk::OrientedImage<short,3>
>      >>::Write()  Línea 232 + 0x12 bytes    C++
>      >    
>      myAplication.exe!itk::ImageFileWriter<itk::OrientedImage<short,3>
>      >>::Update()  Línea 148 + 0x12 bytes    C++
>      >      myAplication.exe!CmyAplicationDlg::FilterThread()  Línea 608
>     + 0x32
>      > bytes    C++
>      >
>      > Thanks for your help.
>      >
>      >
>      >
>      > On Mon, Nov 24, 2008 at 1:25 PM, Dan Mueller <dan.muel at gmail.com
>     <mailto:dan.muel at gmail.com>> wrote:
>      >>
>      >> Hi Ivan,
>      >>
>      >> Perhaps try the following:
>      >>
>      >>   try
>      >>     {
>      >>     writer->Update();
>      >>     }
>      >>   catch( itk::ExceptionObject & excp )
>      >>    {
>      >>    std::cerr << excp << std::endl;
>      >>    }
>      >>
>      >> This should provide some more details regarding this issue. Let us
>      >> know what you find.
>      >>
>      >> HTH
>      >>
>      >> Regards, Dan
>      >>
>      >> 2008/11/24 ivan gm <ivan.gm.itk at gmail.com
>     <mailto:ivan.gm.itk at gmail.com>>:
>      >> > Hello:
>      >> >
>      >> > Im trying to save an image in a file with the code bellow:
>      >> >                         writer = WriterType::New();
>      >> >                         writer->SetFileName(originalName.c_str());
>      >> >                         writer->SetImageIO(
>     itk:DicomImageIO::New() );
>      >> >     // itk::AnalyzeImageIO::New());
>      >> >                         writer->SetInput( this->tempImage1 );
>      >> >                         writer->Update();
>      >> > When i use a itk::AnalyzeImageIO it works fine but when I
>     change it to
>      >> > DicomImageIO (because i want to save the file in dcm format
>     instead of
>      >> > hdr)
>      >> > the program crash with the following Excetion message:
>      >> >
>      >> > Excepción no controlada en 0x7c812aeb en myprogram.exe:
>     Excepción de
>      >> > Microsoft C++: CMemoryException en la ubicación de memoria
>     0x0ffbd514.
>      >> >
>      >> > I think the problem is that my computer don't have enough RAM
>     memory...
>      >> > can
>      >> > anybody tell me if I can't solve the problem without
>     increasing the RAM?
>      >> >
>      >> > On the other hand, I tried to handle this CMemoryException
>     with the
>      >> > following code:
>      >> >                     try {
>      >> >                           //code
>      >> >                     } catch (CMemoryException e) {
>      >> >                          printf("whatever");
>      >> >                     }
>      >> > But it doesn't catch anything. Any help?
>      >> >
>      >> >
>      >> > Thanks a lot.
>      >> >
>      >> > Iván García Martínez.
>      >> >
>      >> > _______________________________________________
>      >> > Insight-developers mailing list
>      >> > Insight-developers at itk.org <mailto:Insight-developers at itk.org>
>      >> > http://www.itk.org/mailman/listinfo/insight-developers
>      >
>      >
>      > _______________________________________________
>      > Insight-developers mailing list
>      > Insight-developers at itk.org <mailto:Insight-developers at itk.org>
>      > http://www.itk.org/mailman/listinfo/insight-developers
>      >
>      >
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Insight-developers mailing list
> Insight-developers at itk.org
> http://www.itk.org/mailman/listinfo/insight-developers


More information about the Insight-developers mailing list