当前位置: 代码迷 >> Brew >> 0xC0000005: 读取位置 0x61636970 时发作访问冲突
  详细解决方案

0xC0000005: 读取位置 0x61636970 时发作访问冲突

热度:8386   发布时间:2013-02-26 00:00:00.0
0xC0000005: 读取位置 0x61636970 时发生访问冲突
跟踪代码,发现时分配内存时出现这个错误。
void *ptr =  MALLOC(size);
就是这行出错了。 size > 0

请问这是什么原因啊。 
------解决方案--------------------------------------------------------
估计是内存用完了 
可能你在其他地方频繁地使用内存、
------解决方案--------------------------------------------------------
简单的说,内存分配失败。是不是你其他地方申请了,不用的时候又不释放内存?
------解决方案--------------------------------------------------------
内存泄漏、无可用内存
------解决方案--------------------------------------------------------
如果返回NULL,可能因为内存用尽了(比如大量内存泄漏),可能因为BREW找不到一个足够大的堆节点。
如果程序崩掉,可能是其他地方出问题了,比如内存越界,破坏了BREW内部堆节点等等。
你说的“读取位置 0x61636970 时发生访问冲突”,可能是因为后者吧。

------解决方案--------------------------------------------------------
引用:
如果返回NULL,可能因为内存用尽了(比如大量内存泄漏),可能因为BREW找不到一个足够大的堆节点。
如果程序崩掉,可能是其他地方出问题了,比如内存越界,破坏了BREW内部堆节点等等。
你说的“读取位置 0x61636970 时发生访问冲突”,可能是因为后者吧。

对,应该不是内存耗尽导致的,估计是内存越界了。
------解决方案--------------------------------------------------------
引用:
内存越界要怎么查找比较容易找到问题点呢。
现在跟踪代码,都是在MALLOC这里程序崩掉呢。

如果你的程序不大,可以先搜索在崩溃点之前是否执行了:MEMSET,MEMCPY,STRCPY等可疑函数。需注意每个调用处的dest buffer是否足够大,如果不够大,就可能会有内存越界发生。
------解决方案--------------------------------------------------------
TRACE32 断0x0 - 0x3地址。
估计你那个不是内存耗尽导致的, 因为内存耗尽只是分配失败, 不会崩溃的。 呵呵
  相关解决方案