意外情况编号: 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

解决方案 »

  1.   

    函数: ntdll!ExpInterlockedPopEntrySListFault
            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]
      

  2.   

     意外情况编号: c00000fd (堆栈溢出)
    所以不是堆栈溢出
    ---
    内存越界改了堆栈的值??
      

  3.   

    一般不用怀疑系统DLL问题,堆栈反向到你的代码处查看,如果怀疑是堆 栈空间不够用 可以使用#pragma或编译选项指定堆栈大小
     
      #pragma comment(linker, "/STACK:0x09000000") //128字节栈空间
      #pragma comment(linker, "/HEAP:0x04000000") //64M字节堆空间
      

  4.   

    堆栈溢出是c00000fd
    所以不是堆栈的问题堆栈已经是错误的数据了,很可能是数组越界问题是我的代码有几万行,
    要慢慢走查代码一轮了
      

  5.   

    根据自己的日志:
    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是无符号数组
      

  6.   

    strcpy该换成strcpy_s了...
    vc6也该升级了...
      

  7.   

    代码几万行,慢慢排除太慢了我重新数组类,行不?
    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);
    }
    };
      

  8.   

    看下面这个链接有没有用。http://www.cppblog.com/kevinlynx/archive/2008/04/24/47998.html
    C、C++程序中经常误用无效的指针,从而大致各种各样的非法内存访问(写/读)。最简单的情况类似于: 
    这样的情况由类似以下代码引起:char *p = 0; *p = 'a'; 当你看到类似于“写入位置XXXX时发生访问冲突“时,那么你大致可以断定,你的程序在某个地方访问到非法内存。开调试器对调用堆栈进行跟踪即可找出错误。
      

  9.   

    看起来不像堆栈问题ExpInterlockedPopEntrySListFault
      
    从俺滴经验判断,这个函数内部崩溃通常是因为多线程同步问题导致的
      

  10.   

    另外,你这个bug容易重现吗?
    是每次都会出还是很难复现?如果不容易复现,pdb放上去,出问题的时候minidump一下拿dmp回来debug
    或者pdb放上去输出一下错误线程执行进入nt函数前最后的cpp文件名和行号,看是不是每次出错都在同一个地点发生
      

  11.   

    是否两个线程同时访问了数组 arPoss ?
      

  12.   

    不是线程的问题.主线程和服务线程的通讯只有一处,
    把主线程得到的数据Copy到服务线程
      

  13.   

    假如你在 copy 的时候,数组长度有变化,这里可能是一个问题。
      

  14.   

    主线程和服务线程的通讯只有一处,
    把主线程得到的数据Copy到服务线程
    ---
    同步了哦
      

  15.   


    难重现就像我前面说的, minidump或者抓行号吧, 没啥更好的解决办法
      

  16.   

    log输出吧,先找到出错的函数,然后慢慢排查~
      

  17.   

    个人认为就是线程的问题,你看看你定义临界区了么 你在copy的同时是不是写入了 
      

  18.   

    Drwtsn32的数据很可能是错误的
    因为数组越界后并不是马上出现问题的.现在我的想法是一数组越界,马下被catch,这样才会定位错误
      

  19.   


    那就把你的数据区封装一下,尾部增加几个保护字节,构造时候末尾部分填充几个magic word,析构的时候判断magic word,如果和构造时候填充的数值不同就throw exception
    这样第一个throw exception的对象就是越界的数据
      

  20.   

    代码量大的话,还是用boundschecker检测越界这种问题吧
    手工检查能累死一头牛
      

  21.   

    好的,过几天
    下一个boundschecker