这几天对异常很感兴趣,在学习的时候,写了一个简单的语句
如下
Onbutton2()
{
char* s=0;
char ss=*s;
}在vc里面竟然正常运行.
难道语句被它优化了??还是其他原因?
方正在c++builder6.0里面
是抛出异常了??
求教中???
char* s=0;没问题
其实就是
char *s=NULL;
char ss=*S;只要你不为ss赋值也没问题
你的语句的意思是
char* s;
s = NULL;
char ss = *s;
你看明白了!你这么做有什么意思!
debug里面不能访问不属于他的绝对内存地址,release就不管了,只要不赋值就不出错误
char* s;
s = NULL;
就是这样。语法上没错,具体的使用就看看实际情况了。
一般结构体的下一个指针也为NULL;
char* s=0; 已经超出了程序的地址范围,再用这个非法的地址给ss赋值当然就报错了!
这是因为:在release中编译器做了优化,char ss=*s并没有生成代码,
只有在用到ss的时候才真正的生成,你如果在后面加上
cout << s;//在控制台程序
保准你死翘翘
具体检验方法可以这样:
__asm int 1
char ss=*s;
__asm int 1
运行程序后出错,按Cancel,可以发现在int 1 和int 1什么也没有,说明编译器编译的时候优化了代码