2011-08-12 74 views
0

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

如果我从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() 

它的发生,当应用程序被关闭和破坏对象的收益:有像“删除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代码中的一些错误,但问题是有,我可以找到它 问题

+0

如果不查看代码,这几乎是不可能解决的。如果我是你,我会开始寻找未初始化的变量和双重删除。 – molbdnilo

+0

绝对是内存覆盖的地方。你可以仔细检查你的代码是否有双重删除,写入超过分配空间的末端或开始或类似的东西。在Linux上,你也可以通过valgrind运行你的程序,我不知道什么是Windows的替代品。 – Torp

回答

1

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

0

Finnaly我已经知道了! 这是几个错误,所有这些 - 数组操作的索引超出范围。

谢谢大家的帮助!