我正在使用GDAL/OGR库构建一个应用程序,但遇到了一个非常奇怪的问题,即在运行使用多线程调试 DLL ( )运行时库选项编译的程序时出现访问冲突错误。以下示例是演示问题的最小示例:/MDd
#include <ogr_geometry.h>
int main(int argc, char* argv[])
{
OGRPoint *point = new OGRPoint;
delete point; // segmentation fault
return 0;
}
GDAL/OGR库中的其他 OGR 类型也会出现类似问题,因此与OGRPoint
类无关。但是,当内存分配在堆栈上而不是堆上时,没有问题。
当我改用多线程 DLL配置时,代码执行得很好。(所以基本上发布模式很好,但调试模式会遇到提到的访问冲突错误。)该程序在使用g++
.
调用堆栈如下:
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]
关于是什么导致这个问题的任何想法?