0

我正在使用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] 

关于是什么导致这个问题的任何想法?

4

0 回答 0