VC中的0XCCCCCCCC

来源:百度文库 编辑:神马文学网 时间:2024/05/03 11:20:54
http://csw8923.vipkj.com/Html/?556.html   在VC Debug版本里,栈中分配的值都会先用0xCCCCCCCC来处理一下,所以大家在Debug模式下调试程序发现在引用0xCCCCCCCC这样的值,就说明在试图使用一个没有初始化的值。这就是在Debug模式下调试的好处之一,如果在Release模式下,系统就不会用0xCCCCCCCC来处理一下了。至于为什么选择0xCCCCCCCC大概是因为 端点中断int 3 对应的机器码就是0xCC吧,我也不是很有把握。
  用固定的地址是可以访问指针所指向的数据的。但是在一般情况下,Windows可能会报非法操作。
       VC的DEBUG版会把未初始化的指针自动初始化为0xCCCCCCCC,而不是就让它随机去,那是因为DEBUG版的目的是为了方便我们调试程序的,如果野指针的初值不确定,那么每次调试同一个程序就可能出现不一样的结果,比如这次程序崩掉,下次正常运行,再一次虽然没崩掉,但结果不对……那显然对我们解bug是非常不利的。
DEBUG版本为了能让程序员更早的发现错误,把堆栈上的数据对初始化成了0xcc,也就是说局部变量如果不初始化,那么DEBUG版本中就会是0xCC。
        Debug为了调试方便,也就是其Edit And Continue特性,为每个函数都多分配了64个字节。当用户在调试时在代码里增加少量变量的时候,编译器就可以分配那64个字节的空间过去,这样就不用重新编译程序来重新调试。 另一种说法:如果变量的数据类型由于你的运算的溢出了,在内存中系统就自动改为-858993460 或者说:  
为了帮你debug人家会把内存事先都填0xcc, 如果你看到类似的指针,那就是程序已经出错了。 本文出自
映轩晓屋 - 资料库 - http://csw8923.vipkj.com/Html/?556.html (#)