屯,烫,췍,쳌之谜

其实很简单,这些特殊的字符串其实就是堆栈里面的数据初始化问题。我们看一段简单的代码

#include "stdafx.h" #include int _tmain(int argc, _TCHAR* argv[]) { wchar_t szTestU[260]; char szTestA[260]; wchar_t *pU =(wchar_t *) malloc ( sizeof(wchar_t) * 100 ); char *pA =(char *) malloc ( sizeof(char) * 100 ); __asm nop; return 0; }

 

我们在VC2005里面测试这段代码的效果,可以在 __asm nop ;这里打个断点,我们查看下局部变量就发现了这些神奇的字符串

屯,烫,췍,쳌之谜_第1张图片
看下内存就知道了,这里的屯其实就是0xcd , 烫就是0xcc , 就是0xcdcd, 쳌就是0xcccc,因为后两个是unicode。

我们知道局部变量初始化在栈区,而malloc分配的内存则在堆区,而未初始化的的栈区就被置为0xcc,未初始化的堆区就被置为0xcd(unicode同)

你可能感兴趣的:(c/c++)