[Insight-users] Problem with readers / writers in debug mode

Luis Ibanez luis.ibanez at kitware.com
Sun Apr 17 17:41:52 EDT 2005


Hi Ivan,

You are probably mixing libraries from two different
compilation modes (Debug/Release), this may happen
if your have DLLs lying around in your path.

Didn't you get a warning/error message at the moment
of linking your executable ?

If so, please post that message to the list.


   Regards,



      Luis



-----------------------
Iván Macía wrote:

> Hi all,
> 
> Im experiencing some trouble with the classes itk::ImageFileReader and
> itk::ImageFileWriter.
> I get an assertion when trying to update the reader or writer in Debug mode.
> This does not 
> happen in Release mode or if I declare explicitly an itk::ImageIO derived
> object and assign it to the reader / writer.
> 
> The following assertion occurs when I try to update the reader in the code
> below 
> 
> Debug Assertion Failed !
> File : dbgdel.cpp
> Line : 51
> Expression : _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
> 
> The assertion happens in itkImageIOFactory.txx in the CreateImageIO()
> function when returning an ImageIOBase::Pointer from the std::list<> . Seems
> to be a problem with the std::list<> destruction.
> 
> Im running itk-2.0.0 (experienced this problem with older versions too) with
> Visual Studio 7.0. Any help would be very appreciated.
> 
> Thanks in advance
> 
> Iván
> 
> 
> 
> // ImageSubstract.cxx
> // Substracts two 3D images taken as inputs
> 
> #include "itkImageFileReader.h"
> #include "itkImageFileWriter.h"
> #include "itkSubtractImageFilter.h"
> 
> using namespace itk;
> 
> int main( int argc, char ** argv )
> {
> 
> 	// Verify the number of parameters in the command line
> 	if( argc < 4 )
> 	{
> 		std::cerr << "Usage: " << std::endl;
> 		std::cerr << argv[0] << " inputImageFile1 inputImageFile2
> outputImageFile " 
> 			<< std::endl;
> 		return -1;
> 	}
> 	
> 	typedef float ReaderPixelType;
> 	typedef short WriterPixelType;
> 	typedef float InternalPixelType;
> 	const unsigned int Dimension = 3;
> 	typedef Image< ReaderPixelType, Dimension > ReaderImageType;
> 	typedef Image< WriterPixelType, Dimension > WriterImageType;
> 	typedef Image< InternalPixelType, Dimension > InternalImageType;
> 	typedef ImageFileReader< ReaderImageType > ReaderType;
> 	typedef ImageFileWriter< WriterImageType > WriterType;
> 	typedef SubtractImageFilter< InternalImageType, InternalImageType,
> WriterImageType > 
> 		SubstractFilterType;
> 	
> 	ReaderType::Pointer reader1 = ReaderType::New();
> 	ReaderType::Pointer reader2 = ReaderType::New();
> 	WriterType::Pointer writer = WriterType::New();
> 	SubstractFilterType::Pointer substractor =
> SubstractFilterType::New();
> 	
> 	const char * inputFilename1 = argv[1];
> 	const char * inputFilename2 = argv[2];
> 	const char * outputFilename = argv[3];
> 	
> 	reader1->SetFileName( inputFilename1 );
> 	reader2->SetFileName( inputFilename2 );
> 
> 	try 
>   	{ 
>     		reader1->Update();
> 		reader2->Update();
>   	} 
>   
> 	catch( itk::ExceptionObject & err ) 
>   	{ 
>       	std::cout << "ExceptionObject caught !" << std::endl; 
>     		std::cout << err << std::endl; 
>     		return -1;
>   	}
> 	
> 	substractor->SetInput1( reader1->GetOutput() );
> 	substractor->SetInput2( reader2->GetOutput() );
> 
> 	try 
>   	{ 
>       	substractor->Update();
> 	} 
>   
> 	catch( itk::ExceptionObject & err ) 
>   	{ 
>     		std::cout << "ExceptionObject caught !" << std::endl; 
>     		std::cout << err << std::endl; 
>     		return -1;
>   	}
> 	
> 	writer->SetFileName( outputFilename );
> 	writer->SetInput( substractor->GetOutput() );
> 	
> 	try 
> 	{ 
> 		writer->Update(); 
> 	}
>  
> 	catch( itk::ExceptionObject & err ) 
> 	{ 
> 		std::cout << "ExceptionObject caught !" << std::endl; 
> 		std::cout << err << std::endl; 
> 		return -1;
> 	}
> }
> 





More information about the Insight-users mailing list