在mlock中访问冲突

时间:2011-08-12 14:39:01

标签: c++ access-violation release-mode

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

如果我从MS VS(即使是发布模式)运行应用程序,一切正常,我无法找到正在发生的事情。 我曾尝试使用即时调试,并收到了调用堆栈:

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调试功能(内存泄漏诊断,自定义内存分配挂钩等),没有结果。 另外我发现,当使用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代码中存在一些错误,但问题是我能找到它 问题

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

最后我抓住了它! 这是几个错误,所有这些错误 - 在数组操作中索引超出范围。

谢谢大家的帮助!