VC 内存错误码整理

来源:互联网 发布:什么网络电视机顶盒好 编辑:程序博客网 时间:2024/06/06 15:52

  经常碰到一些错误码,但不能清楚是什么意思不便于发现原因。所以参考网上资料做了下整理。

0x0000007d:表示没有足够的内存来启动Microsoft Windows操作系统。这个是 系统停止码 ,不属于VC内存错误码,只是某些情况下也会弹出这些停止码,特别是发布程序时。这篇博客提到了一个可能原因和解决办法:http://blog.csdn.net/vbcom/article/details/6070705 。另外 如果想了解更多错误码可以参考该网站:http://www.errordecoder.com/error-codes/ 。0xabababab - Memory following a block allocated by LocalAlloc(局部变量内存块)。微软 HeapAlloc()用于标记已分配的对内存前后 "没有使用"的内存块。0xABADCAFE:启动此值初始化所有的可用内存来捕捉出错的指针。0xBAADF00D:微软的LocalAlloc的(LMEM_FIXED)用于标记未初始化分配的堆内存。0xBADCAB1E:当Microsoft EVC调试器连接被中断时返回的错误码。0xBEEFCACE:微软NET中作为一个资源文件的幻数。0xC0000005 访问冲突 :可能是数组越界,访问已经释放的空间。0xC0000008:无效的句柄。0xBAADF00D - HeapAlloc分配的内存。0xcccccccc - Uninitialized locals in VC6 when you compile w/ /GZ(当编译时没有初始化的局部变量,主要是DEBUG下面,系统会给没有用到的内存块填充 int 3.Release版本不会填充)。微软C++运行库用于标记未初始化的栈内存。 在VC Debug版本里,栈中分配的值都会先用0xCCCCCCCC来处理一下,所以大家在Debug模式下调试程序发现在引用0xCCCCCCCC这样的值,就说明在试图使用一个没有初始化的值。这就是在Debug模式下调试的好处之一,如果在Release模式下,系统就不会用0xCCCCCCCC来处理一下了。至于为什么选择0xCCCCCCCC大概是因为 端点中断int 3 对应的机器码就是0xCC吧,我也不是很有把握。用固定的地址是可以访问指针所指向的数据的。但是在一般情况下,Windows可能会报非法操作。DEBUG版本为了能让程序员更早的发现错误,把堆栈上的数据对初始化成了0xcc,也就是说局部变量如果不初始化,那么DEBUG版本中就会是0xCC。       在给一个指针对象传值时,没有用取地址符&,直接把对象写在代码那,也可能报这个错误。可以认为0x0cc就是有特殊含义的占位符,对于指针而言,它跟NULL是一个意思。0xCDCDCDCD:Created but not initialised()定义但未初始化。微软C++运行库用于标记未初始化的堆内存。0xdddddddd - 已删除的对象。Deleted(已删除的,CRT中称处于这种状态的内存区为 Dead Land。同时边界DWORD也同时被清除。)0xDEADDEAD:当用户手动启动崩溃时的微软Windows停止错误码。0xfdfdfdfd - 微软用于标记堆的前后无人使用的标识符。0xfeeefeee - Freed memory set by NT's heap manager堆管理器释放的内存区域。由HeapFree()释放的堆内存。


另外  dbgheap.c 文件与这些错误码 有关。可以参照阅读。

原创粉丝点击