我正在使用 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]
有关导致此问题的原因的任何想法?