联系方式:uestc001@gmail.com,欢迎转载,请注明出处http://blog.csdn.net/uestc001/article/details/8454760
今天写代码,出现了“屯屯屯屯”,说明我忘记初始化了。这个屯屯屯很好玩,开始编程那会儿经常遇到,菜鸟,所以很眼熟。
在vs2008里可能遇到“烫烫烫烫烫烫烫烫烫烫烫”或“屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯”。什么意思呢?
请看代码:
- #include "stdafx.h"
- #include <string.h>
- int _tmain(int argc, _TCHAR* argv[])
- {
- unsigned char testArray[256];
- printf("%s\n", testArray);
- unsigned char *p = new unsigned char[256];
- printf("%s\n", p);
- delete []p;
- p = NULL;
- return 0;
- }
#include "stdafx.h"
#include <string.h>
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char testArray[256];
printf("%s\n", testArray);
unsigned char *p = new unsigned char[256];
printf("%s\n", p);
delete []p;
p = NULL;
return 0;
}
效果:
"烫"的编码是0xCCCC, "屯"的编码是0xCDCD
网上搜了一下,是这么解释的:
debug模式为了便于在出现问题的时候查找原因,编译器会对未手工初始化的数据填充特定的值。
在dbgheap.c中106-109行(VS2008)有如下代码段:
- static unsigned char _bNoMansLandFill = 0xFD; /* fill no-man's land with this */
- static unsigned char _bAlignLandFill = 0xED; /* fill no-man's land for aligned routines */
- static unsigned char _bDeadLandFill = 0xDD; /* fill free objects with this */
- static unsigned char _bCleanLandFill = 0xCD; /* fill new objects with this */
- static _CrtMemBlockHeader * _pFirstBlock;
- static _CrtMemBlockHeader * _pLastBlock;
static unsigned char _bNoMansLandFill = 0xFD; /* fill no-man's land with this */
static unsigned char _bAlignLandFill = 0xED; /* fill no-man's land for aligned routines */
static unsigned char _bDeadLandFill = 0xDD; /* fill free objects with this */
static unsigned char _bCleanLandFill = 0xCD; /* fill new objects with this */
static _CrtMemBlockHeader * _pFirstBlock;
static _CrtMemBlockHeader * _pLastBlock;
说明:
_bNoMansLandFill,byte No Mans Land Fill, "no-man's-land"的意思是:所有权争执未定的土地,这里表示边界内存。注释说了用这个值填充内存分配的边界。当你访问到这个值的时候,就说明访问越界了。
_bAlignLandFill,byte Align Land Fill, 内存对齐填充值。
_bDeadLandFill,byte Dead Land Fill,填充已经释放的内存空间,比如delete了一段内存空间,这段空间就填充0xDD,再次尝试delete的时候,就会crash了。
_bCleanLandFill,byte Clean Land Fill,堆区未手动初始化的填充值。
0xCC(244)是自动变量为初始化的填充值,栈区分配的时候就填充0xCC。
Vs2008的Debug用0xCD(255)填充堆,两个0xCD和在一起就是“屯”。
总结:出现“烫”或“屯”,解决办法:扩大数组范围或初始化数组 。
参考:http://hi.baidu.com/luosiyong/item/2020760be3629a823c42e208
(完)
此文章来自于【http://blog.csdn.net/uestc001/article/details/8454760】