В чем разница между функцией heapalloc() для отладки и выпуска ?
Мой проект использует две разные функции для выпуска и отладки. Мой код терпит крах в релизной версии, при выделении памяти.
Выпускать:
WINBASEAPI _Ret_maybenull_ _Post_writable_byte_size_(dwBytes) LPVOID WINAPI HeapAlloc(_In_ HANDLE hHeap,_In_ DWORD dwFlags,_In_ SIZE_T dwBytes);
Отлаживать:
#ifdef _DEBUG #define HeapAlloc( a, b, c ) _calloc_dbg( (c), 1, _NORMAL_BLOCK, __FILE__, __LINE__ ) #endif
Код соответствует приведенному ниже, он используется для чтения xml-файла в C++\VC++.
Здесь я написал только примерную часть, которая будет читаться строка за строкой.
HANDLE hHeap = NULL; SYSTEM_INFO si; GetSystemInfo( &si ); hHeap = HeapCreate( HGE, 16 * si.dwPageSize, 0L ); int HGE = HEAP_GENERATE_EXCEPTIONS; TCHAR *xmlTag = _T("nXMLPages"); size_t lenTag = _tcslen( xmlTag ); TCHAR *StartXMLTag = NULL, *EndXMLTag = NULL; StartXMLTag = (TCHAR *) HeapAlloc( hHeap, HGE, ( lenTag + 2 ) * sizeof( TCHAR ) ); EndXMLTag = (TCHAR *) HeapAlloc( hHeap, HGE, ( lenTag + 4 ) * sizeof( TCHAR ) );
//Место сбоя при вызове HeapAlloc() для EndXMLTag
Что я уже пробовал:
Входной файл данных как; &ЛТ;nxmlpages&ГТ;4
Richard MacCutchan
Вам нужно использовать свой отладчик для сбора дополнительной информации. Проверьте значения всех переменных в точке отказа.