意外情况编号: c0000005 (访问冲突)错误信息
7c94bd02 8b18 mov ebx,[eax]
7c94bd02 8b18 mov ebx,[eax]]
7c94bd02 ntdll!ExpInterlockedPopEntrySListFault
*----> 堆栈反向跟踪 <---*
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
003706e8 4f100007 01000015 00045019 0000010e ntdll!ExpInterlockedPopEntrySListFault
000001b8 00000000 00000000 00000000 00000000 0x4f100007
7c94bd02 8b18 mov ebx,[eax]
7c94bd02 8b18 mov ebx,[eax]]
7c94bd02 ntdll!ExpInterlockedPopEntrySListFault
*----> 堆栈反向跟踪 <---*
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
003706e8 4f100007 01000015 00045019 0000010e ntdll!ExpInterlockedPopEntrySListFault
000001b8 00000000 00000000 00000000 00000000 0x4f100007
解决方案 »
- tab控件继承cwnd自绘//切换标签卡是什么原因造成的?
- 求助,程序运行后可用内存不断减少,请帮忙看下是怎么回事,谢谢
- 怎么让程序响应PreTranslateMessage(MSG* pMsg)?
- 关于软件模块化的问题
- 分割窗口中listview的重绘
- win32 sdk 和 MFC混合开发?
- 如何调用CHtmlView的OnDocumentComplete事件?
- VC中的sprintf在VB里怎么表示!高分送!!
- 能不能实现电脑访问一个IP地址时,此址替换成另一个IP地址。IP重定向功能!!
- ole能不能自己实现进程间通信
- 3ds文件导入OpenGL后,纹理贴图丢失
- 求助:对话框中全选按钮如何实现
7c94bc81 f5 cmc
7c94bc82 9b wait
7c94bc83 dfe0 fstsw
7c94bc85 9e sahf
7c94bc86 7af8 jpe ntdll!tan+0x4d (7c94bc80)
7c94bc88 ddd9 fstp st(1)
7c94bc8a d9f2 fptan
7c94bc8c ddd8 fstp st(0)
7c94bc8e ebcb jmp ntdll!tan+0x28 (7c94bc5b)
7c94bc90 e89ac30000 call ntdll!CIpow+0x23d (7c95802f)
7c94bc95 eb1b jmp ntdll!tan+0x7f (7c94bcb2)
7c94bc97 a9ffff0f00 test eax,0xfffff
7c94bc9c 75f2 jnz ntdll!tan+0x5d (7c94bc90)
7c94bc9e 837c240800 cmp dword ptr [esp+0x8],0x0
7c94bca3 75eb jnz ntdll!tan+0x5d (7c94bc90)
7c94bca5 ddd8 fstp st(0)
7c94bca7 db2de8769b7c fld tbyte ptr [ntdll!fltused+0x30 (7c9b76e8)]
7c94bcad b801000000 mov eax,0x1
7c94bcb2 833d2c779b7c00 cmp dword ptr [ntdll!NlsMbOemCodePageTag+0x4 (7c9b772c)],0x0
7c94bcb9 0f85e2c30000 jne ntdll!CIpow+0x2af (7c9580a1)
7c94bcbf ba20000000 mov edx,0x20
7c94bcc4 8d0dd0769b7c lea ecx,[ntdll!fltused+0x18 (7c9b76d0)]
7c94bcca e810c50000 call ntdll!CIpow+0x3ed (7c9581df)
7c94bccf 5a pop edx
7c94bcd0 c3 ret
7c94bcd1 53 push ebx
7c94bcd2 55 push ebp
7c94bcd3 33db xor ebx,ebx
7c94bcd5 8be9 mov ebp,ecx
7c94bcd7 8b5504 mov edx,[ebp+0x4]
7c94bcda 8b4500 mov eax,[ebp]
7c94bcdd 0bc0 or eax,eax
7c94bcdf 740c jz ntdll!tan+0xba (7c94bced)
7c94bce1 8bca mov ecx,edx
7c94bce3 668bcb mov cx,bx
7c94bce6 f00fc74d00 lock cmpxchg8b qword ptr [ebp]
7c94bceb 75f0 jnz ntdll!tan+0xaa (7c94bcdd)
7c94bced 5d pop ebp
7c94bcee 5b pop ebx
7c94bcef c3 ret
7c94bcf0 90 nop
7c94bcf1 53 push ebx
7c94bcf2 55 push ebp
7c94bcf3 8be9 mov ebp,ecx
ntdll!ExpInterlockedPopEntrySListResume:
7c94bcf5 8b5504 mov edx,[ebp+0x4]
7c94bcf8 8b4500 mov eax,[ebp]
7c94bcfb 0bc0 or eax,eax
7c94bcfd 740c jz ntdll!ExpInterlockedPopEntrySListEnd+0x7 (7c94bd0b)
7c94bcff 8d4aff lea ecx,[edx-0x1]
错误 ->ntdll!ExpInterlockedPopEntrySListFault:
7c94bd02 8b18 mov ebx,[eax] ds:0023:000001b8=????????
ntdll!ExpInterlockedPopEntrySListEnd:
7c94bd04 f00fc74d00 lock cmpxchg8b qword ptr [ebp]
7c94bd09 75ea jnz ntdll!ExpInterlockedPopEntrySListResume (7c94bcf5)
7c94bd0b 5d pop ebp
7c94bd0c 5b pop ebx
7c94bd0d c3 ret
7c94bd0e 8d4900 lea ecx,[ecx]
7c94bd11 8f0424 pop [esp]
7c94bd14 90 nop
7c94bd15 53 push ebx
7c94bd16 55 push ebp
7c94bd17 8be9 mov ebp,ecx
7c94bd19 8bda mov ebx,edx
7c94bd1b 8b5504 mov edx,[ebp+0x4]
7c94bd1e 8b4500 mov eax,[ebp]
7c94bd21 8903 mov [ebx],eax
7c94bd23 8d8a01000100 lea ecx,[edx+0x10001]
7c94bd29 f00fc74d00 lock cmpxchg8b qword ptr [ebp]
7c94bd2e 75f1 jnz ntdll!ExpInterlockedPopEntrySListEnd+0x1d (7c94bd21)
7c94bd30 5d pop ebp
7c94bd31 5b pop ebx
7c94bd32 c3 ret
7c94bd33 90 nop
7c94bd34 8bff mov edi,edi
ntdll!RtlInterlockedPushListSList:
7c94bd36 53 push ebx
7c94bd37 55 push ebp
7c94bd38 8be9 mov ebp,ecx
7c94bd3a 8bda mov ebx,edx
7c94bd3c 8b5504 mov edx,[ebp+0x4]
7c94bd3f 8b4500 mov eax,[ebp]
7c94bd42 8b4c240c mov ecx,[esp+0xc]
7c94bd46 8901 mov [ecx],eax
7c94bd48 8d8a00000100 lea ecx,[edx+0x10000]
7c94bd4e 034c2410 add ecx,[esp+0x10]
7c94bd52 f00fc74d00 lock cmpxchg8b qword ptr [ebp]
7c94bd57 75e9 jnz ntdll!RtlInterlockedPushListSList+0xc (7c94bd42)
7c94bd59 5d pop ebp
7c94bd5a 5b pop ebx
7c94bd5b c20800 ret 0x8
ntdll!RtlFirstEntrySList:
7c94bd5e 8b442404 mov eax,[esp+0x4]
7c94bd62 8b00 mov eax,[eax]
7c94bd64 c20400 ret 0x4
7c94bd67 8d4900 lea ecx,[ecx]
7c94bd6a 53 push ebx
7c94bd6b 55 push ebp
7c94bd6c 8be9 mov ebp,ecx
7c94bd6e 8b1a mov ebx,[edx]
7c94bd70 8b4a04 mov ecx,[edx+0x4]
所以不是堆栈溢出
---
内存越界改了堆栈的值??
#pragma comment(linker, "/STACK:0x09000000") //128字节栈空间
#pragma comment(linker, "/HEAP:0x04000000") //64M字节堆空间
所以不是堆栈的问题堆栈已经是错误的数据了,很可能是数组越界问题是我的代码有几万行,
要慢慢走查代码一轮了
2011-02-06 07-19-53 CYongHus::SaveRen 4
void WriteLog(char* pszFunName,long iStep)
{
HANDLE hMapFile =OpenFileMapping(FILE_MAP_WRITE,FALSE,"SysLog");
LPBYTE pBaseMapFile=(LPBYTE)MapViewOfFile(hMapFile,
FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
if( NULL == pBaseMapFile )
return ;
if(strlen(pszFunName) < 100)
strcpy((char*)(pBaseMapFile+4),pszFunName);
else
strcpy((char*)(pBaseMapFile+4),"函数名超过99个字符");
memcpy(pBaseMapFile+104,&iStep,sizeof(iStep));
UnmapViewOfFile(pBaseMapFile);
CloseHandle(hMapFile);
}
内存映射是另一个程序Watch.exe建立的WriteLog("CYongHus::SaveRen",iStep = 4);
arPoss.Add(uIndex);
WriteLog("CYongHus::SaveRen",iStep = 5);
arPoss是无符号数组
vc6也该升级了...
template<class TYPE, class ARG_TYPE>
class CMyArray : public CArray<TYPE,ARG_TYPE>
{
public:
TYPE& ElementAt( int nIndex )
{
if( nIndex < 0 || nIndex > m_nSize )
{
exit(0);
}
else
return CArray<TYPE,ARG_TYPE>::ElementAt(nIndex);
}
};
C、C++程序中经常误用无效的指针,从而大致各种各样的非法内存访问(写/读)。最简单的情况类似于:
这样的情况由类似以下代码引起:char *p = 0; *p = 'a'; 当你看到类似于“写入位置XXXX时发生访问冲突“时,那么你大致可以断定,你的程序在某个地方访问到非法内存。开调试器对调用堆栈进行跟踪即可找出错误。
从俺滴经验判断,这个函数内部崩溃通常是因为多线程同步问题导致的
是每次都会出还是很难复现?如果不容易复现,pdb放上去,出问题的时候minidump一下拿dmp回来debug
或者pdb放上去输出一下错误线程执行进入nt函数前最后的cpp文件名和行号,看是不是每次出错都在同一个地点发生
把主线程得到的数据Copy到服务线程
把主线程得到的数据Copy到服务线程
---
同步了哦
难重现就像我前面说的, minidump或者抓行号吧, 没啥更好的解决办法
因为数组越界后并不是马上出现问题的.现在我的想法是一数组越界,马下被catch,这样才会定位错误
那就把你的数据区封装一下,尾部增加几个保护字节,构造时候末尾部分填充几个magic word,析构的时候判断magic word,如果和构造时候填充的数值不同就throw exception
这样第一个throw exception的对象就是越界的数据
手工检查能累死一头牛
下一个boundschecker