I have an issue where the VC++ 2005 ( or with SP1 ) Release build throws a null pointer exception in memcpy() right after calling Image::read(), apparently while initializing the file name.
On tracing this down, it appears there is some calling issue between the VC++ code and the Magick++ libraries, but only for the Release build. The code is as follows:
Code: Select all
CString theFile;
:
theFile = "C:\\JPG\\TEST.JPG";
:
Image my_image; // create an *empty* image using the default Image constructor
my_image.read( (LPCSTR) theFile ); // read a GIF image file from disk
Code: Select all
Image my_image; // create an *empty* image using the default Image constructor
0041BB30 mov esi,esp
0041BB32 lea ecx,[my_image]
0041BB38 call dword ptr [__imp_Magick::Image::Image (445C28h)]
0041BB3E cmp esi,esp
0041BB40 call @ILT+3440(__RTC_CheckEsp) (412D75h)
0041BB45 mov byte ptr [ebp-4],0Dh
my_image.read( (LPCSTR) theFile ); // read a GIF image file from disk;
0041BB49 mov esi,esp
0041BB4B lea ecx,[ebp-80h]
0041BB4E call dword ptr [__imp_ATL::CSimpleStringT<char,1>::operator char const * (445F88h)]
0041BB54 cmp esi,esp
0041BB56 call @ILT+3440(__RTC_CheckEsp) (412D75h)
0041BB5B mov esi,esp
0041BB5D push eax
0041BB5E lea ecx,[ebp-1B0h]
0041BB64 call dword ptr [__imp_std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> > (446304h)]
0041BB6A cmp esi,esp
0041BB6C call @ILT+3440(__RTC_CheckEsp) (412D75h)
0041BB71 mov byte ptr [ebp-4],0Eh
0041BB75 mov esi,esp
0041BB77 lea eax,[ebp-1B0h]
0041BB7D push eax
0041BB7E lea ecx,[my_image]
0041BB84 call dword ptr [__imp_Magick::Image::read (445C2Ch)]
0041BB8A cmp esi,esp
0041BB8C call @ILT+3440(__RTC_CheckEsp) (412D75h)
0041BB91 mov byte ptr [ebp-4],0Dh
0041BB95 mov esi,esp
0041BB97 lea ecx,[ebp-1B0h]
0041BB9D call dword ptr [__imp_std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> > (446308h)]
0041BBA3 cmp esi,esp
0041BBA5 call @ILT+3440(__RTC_CheckEsp) (412D75h)
And here is the broken release version code:
Code: Select all
Image my_image; // create an *empty* image using the default Image constructor
00403514 lea ecx,[my_image]
00403517 call dword ptr [__imp_Magick::Image::Image (40E010h)]
0040351D mov byte ptr [ebp-4],0Dh
my_image.read( (LPCSTR) theFile ); // read a GIF image file from disk;
00403521 lea ecx,[ebp-48h]
00403524 call dword ptr [__imp_ATL::CSimpleStringT<char,1>::operator char const * (40E274h)]
0040352A push eax
0040352B lea ecx,[ebp-88h]
00403531 call dword ptr [__imp_std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> > (40E468h)]
00403537 mov byte ptr [ebp-4],0Eh
0040353B lea ecx,[ebp-88h]
00403541 push ecx
00403542 lea ecx,[my_image]
00403545 call dword ptr [__imp_Magick::Image::read (40E00Ch)]
0040354B mov byte ptr [ebp-4],0Dh
0040354F lea ecx,[ebp-88h]
00403555 call dword ptr [__imp_std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> > (40E46Ch)]
Many thanks in advance!
-- Bob