在程序关闭的时候提示如下出错信息HEAP[ACOClustering.exe]: Heap block at 003AA328 modified at 003AA384 past requested size of 54
Windows 已在 ACOClustering.exe 中触发一个断点。其原因可能是堆被损坏,这也说明 ACOClustering.exe 中或它所加载的任何 DLL 中有 bug。输出窗口可能提供了更多诊断信息
程序“[212] ACOClustering.exe: 本机”已退出,返回值为 0 (0x0)。我在003AA328、003AA384处下断点,跟踪后只有汇编代码-_-b
这样的错误应该怎样跟踪处理呢?
请各位大牛牛给予指导,谢谢!

解决方案 »

  1.   

    也可能是调用约定的 问题。没有对堆栈进行恢复!
    特别是在调用dll的时候要注意 调用约定!!!
      

  2.   

    这是堆出错,不是堆栈。通常堆访问出错的错误地址是不固定的。如果你的代码是固定在0x003AA328这个地址报错,那么可以在这个位置下一个内存断点。等断点触发时,看看调用堆栈,确认是哪行代码在使用这个地址。另外,从错误信息中能看到请求的是一个54字节大小的内存,所以可以看看代码中分配内存的地方,找那些分配的块小于等于54字节的位置,慢慢分析确认。
      

  3.   

    看程序吧。有一个比较偷懒的、可能能暂时解决的办法:使用结构化异常。
    __try
    {
    }
    __catch()
    {
    }
      

  4.   

    这两个地址的分别在memset.asm和memcpy.asm中
    可是我并没有调用这两个函数哈,真是诡异了
      

  5.   

    这就容易了,在这两个函数中断点,然后当被中断的时候,从call stack回朔往上找到位于你的程序的函数,然后再进一步分析。
      

  6.   

    调用栈还真是高科技哈,第一次用很快就定位了错误,俨然是越界了。
    正如coding_hello帅哥所说,错误的地址不固定,所以比较麻烦哈。