gpt4 book ai didi

c++ - mlock 中的访问冲突

转载 作者:行者123 更新时间:2023-11-28 08:17:51 25 4
gpt4 key购买 nike

我有一个控制台应用程序(使用 MS VS2010 SP1 编写)。没有 MFC,没有 ATL,只有标准库。在调试构建中一切正常。但是在发布版本中存在访问冲突:“Mapp.exe 中 0x77b0206e 处的第一次机会异常:0xC0000005:访问冲突读取位置 0x002cef58。”

如果我从 MS VS(甚至 Release模式)运行应用程序,一切正常,我无法找出发生了什么。我已尝试使用即时调试并收到调用堆栈:

ntdll.dll!77b020cb()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
Mapp.exe!_unlock(int locknum=72090689) Line 375 C
04320069()

它发生在应用程序关闭并且对象销毁继续进行时:有一行像 'delete ptr' 会导致异常。但我多次检查该代码,但一无所获。我尝试使用 CRT 调试功能(内存泄漏诊断、自定义内存分配 Hook 等)但没有结果。我还发现,当使用 CRT 的调试版本(在发布配置中使用多线程调试 (/MTd))时,这个问题就解决了。还有一件事:当我对代码进行一些小改动时(例如,编写一行调试代码),调用堆栈正在发生变化,而且每次都完全不同。例如:

ntdll.dll!77b0206e()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
Mapp.exe!_unlock_fhandle(int fh=72090689) Line 491 C
04320069()

还有一个

ntdll.dll!77b0206e()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!77b0201f()
kernel32.dll!768cf1cc()
Mapp.exe!free(void * pBlock=0x024950f0) Line 51 C
Mapp.exe!CGISMapLineShape::~CGISMapLineShape() Line 20 + 0x13 bytes C++
Mapp.exe!CGISMapPolygonShape::`scalar deleting destructor'() + 0x13 bytes C++
Mapp.exe!CGISMapMultyPolygonShape::~CGISMapMultyPolygonShape() Line 9 C++
Mapp.exe!CGISMapMultyPolygonShape::`scalar deleting destructor'() + 0xc bytes C++
Mapp.exe!CGISMapShapeCollection::Clear() Line 307 C++

我知道 fpplication 代码中有一些错误,但问题是我能找到它吗问题

最佳答案

在发布版本中,内存处理与调试版本有很大不同。当您尝试访问已删除的对象时,通常会发生此错误。如果不加载符号,调用堆栈就是垃圾。

关于c++ - mlock 中的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7041716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com