VC++6.0中类指针的有关问题
VC++6.0中类指针的问题
为什么这样的话,test = CCCCCCCC 呢?
在VC2008.NET的话就没有问题
求解
------解决方案--------------------
野指针没分配内存
------解决方案--------------------
你也没有初始化什么值都有可能
debug状态下会写0xCCCC
------解决方案--------------------
对于临时变量的初始化,是跟编译器有关的。而在windows下VC编译器在Debug模式下为了调试方便(确定越界),会将未初始化的临时变量全部写成0xcc,下面是汇编代码,看红色那一句。
int _tmain(int argc, _TCHAR* argv[])
{
00251350 push ebp
00251351 mov ebp,esp
00251353 sub esp,0D8h
00251359 push ebx
0025135A push esi
0025135B push edi
0025135C lea edi,[ebp-0D8h]
00251362 mov ecx,36h
00251367 mov eax,0CCCCCCCCh
0025136C rep stos dword ptr es:[edi]
int a;
A *test;
return 0;
0025136E xor eax,eax
}
其实对于你的代码不光是test,就是那个a,也是这样的,因为默认显示是10进制,你可以在aotu或者local窗口找到a变量右键,Hexadecimal Display,可以看到a变量也是0CCCCCCCC。
而release下就不会添加初始化了
------解决方案--------------------
没有初始化,什么值都是无意义的
------解决方案--------------------
野指针,0xcccccccc在汇编中表示int 3,就是中断。
调试时候默认是这个值,如果把这个值当成代码执行,就直接中断
------解决方案--------------------
- C/C++ code
class A { public: A() { b = 0; } int b; int a() { b++; return 0; } }; void main() { int a; A *test;
为什么这样的话,test = CCCCCCCC 呢?
在VC2008.NET的话就没有问题
求解
------解决方案--------------------
野指针没分配内存
------解决方案--------------------
你也没有初始化什么值都有可能
debug状态下会写0xCCCC
------解决方案--------------------
对于临时变量的初始化,是跟编译器有关的。而在windows下VC编译器在Debug模式下为了调试方便(确定越界),会将未初始化的临时变量全部写成0xcc,下面是汇编代码,看红色那一句。
int _tmain(int argc, _TCHAR* argv[])
{
00251350 push ebp
00251351 mov ebp,esp
00251353 sub esp,0D8h
00251359 push ebx
0025135A push esi
0025135B push edi
0025135C lea edi,[ebp-0D8h]
00251362 mov ecx,36h
00251367 mov eax,0CCCCCCCCh
0025136C rep stos dword ptr es:[edi]
int a;
A *test;
return 0;
0025136E xor eax,eax
}
其实对于你的代码不光是test,就是那个a,也是这样的,因为默认显示是10进制,你可以在aotu或者local窗口找到a变量右键,Hexadecimal Display,可以看到a变量也是0CCCCCCCC。
而release下就不会添加初始化了
------解决方案--------------------
没有初始化,什么值都是无意义的
------解决方案--------------------
野指针,0xcccccccc在汇编中表示int 3,就是中断。
调试时候默认是这个值,如果把这个值当成代码执行,就直接中断
------解决方案--------------------