Я создаю приложение, используя GDAL / OGR библиотеки и столкнулись с действительно странной проблемой, а именно, получить нарушение доступа ошибка при запуске моей программы, скомпилированной с Многопоточная отладочная DLL (/MDd
) библиотека времени исполнения вариант. Следующий пример является минимальным примером для демонстрации проблемы:
#include <ogr_geometry.h>
int main(int argc, char* argv[])
{
OGRPoint *point = new OGRPoint;
delete point; // segmentation fault
return 0;
}
Аналогичная проблема возникает с другими типами OGR в GDAL / OGR библиотека, поэтому она не связана с OGRPoint
учебный класс. Однако нет проблем, когда память выделяется в стеке, а не в куче.
Код выполняется нормально, когда я использую Многопоточная DLL конфигурация вместо. (Таким образом, в основном режим Release хорош, но режим Debug сталкивается с упомянутой ошибкой нарушения прав доступа.) Программа также работает нормально на Linux, скомпилированном с g++
,
Callstack является следующим:
ntdll.dll!_RtlReportCriticalFailure@8() Unknown
ntdll.dll!_RtlpHeapHandleError@4() Unknown
ntdll.dll!_RtlpLogHeapFailure@24() Unknown
ntdll.dll!RtlFreeHeap() Unknown
AcLayers.dll!6d7158bf() Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for AcLayers.dll]
gdal201.dll!0f87bdbd() Unknown
TestProject.exe!main(int argc, char * * argv) Line 7 C++
[External Code]
Любые идеи о том, что вызывает эту проблему?
Задача ещё не решена.
Других решений пока нет …