VC++6.0中类指针的问题

时间:2022-09-07 19:20:57

class A
{

public:
A()
{
b = 0;
}

int b;

int a()
{
b++;
return 0;
}
};


void main()
{
int a;
A *test;



为什么这样的话,test = CCCCCCCC 呢?
在VC2008.NET的话就没有问题
求解

7 个解决方案

#1


野指针没分配内存

#2


你也没有初始化什么值都有可能
debug状态下会写0xCCCC

#3


对于临时变量的初始化,是跟编译器有关的。而在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下就不会添加初始化了

#4


没有初始化,什么值都是无意义的

#5


野指针,0xcccccccc在汇编中表示int 3,就是中断。
调试时候默认是这个值,如果把这个值当成代码执行,就直接中断

#6


我知道,但是为什么在VC++6.0中就有问题
VC2008.NET就没有问题呢

VS2008.NET就会创建一个指针并指向它,如果VC++6.0要做到同样的效果的话应该怎么做呢 ?
A test;

A *ptest;

ptest = &test;
难道要这样做?

#7


引用 6 楼  的回复:
我知道,但是为什么在VC++6.0中就有问题
VC2008.NET就没有问题呢

VS2008.NET就会创建一个指针并指向它,如果VC++6.0要做到同样的效果的话应该怎么做呢 ?
A test;

A *ptest;

ptest = &test;
难道要这样做?


先new一个,如
A *ptest = new A;

#1


野指针没分配内存

#2


你也没有初始化什么值都有可能
debug状态下会写0xCCCC

#3


对于临时变量的初始化,是跟编译器有关的。而在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下就不会添加初始化了

#4


没有初始化,什么值都是无意义的

#5


野指针,0xcccccccc在汇编中表示int 3,就是中断。
调试时候默认是这个值,如果把这个值当成代码执行,就直接中断

#6


我知道,但是为什么在VC++6.0中就有问题
VC2008.NET就没有问题呢

VS2008.NET就会创建一个指针并指向它,如果VC++6.0要做到同样的效果的话应该怎么做呢 ?
A test;

A *ptest;

ptest = &test;
难道要这样做?

#7


引用 6 楼  的回复:
我知道,但是为什么在VC++6.0中就有问题
VC2008.NET就没有问题呢

VS2008.NET就会创建一个指针并指向它,如果VC++6.0要做到同样的效果的话应该怎么做呢 ?
A test;

A *ptest;

ptest = &test;
难道要这样做?


先new一个,如
A *ptest = new A;