使用多线程调试DLL编译时,Visual Studio中的访问冲突

时间:2016-02-27 23:27:24

标签: c++ visual-studio-2013 segmentation-fault gdal ogr

我正在使用 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++编译的Linux上运行良好。

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] 

有关导致此问题的原因的任何想法?

0 个答案:

没有答案