首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

野指针被赋值,危险吗?该怎么处理

2012-02-19 
野指针被赋值,危险吗?《C++设计模式_基于QT4开源跨平台开发框架》书上P429的一段代码:C/C++ code//编译器是D

野指针被赋值,危险吗?
《C++设计模式_基于QT4开源跨平台开发框架》书上P429的一段代码:

C/C++ code
//编译器是Dev-C++...int main(){     int myint = 5;     int *ptr1 = &myint;     cout<<"*ptr1 = "<<*ptr1<<endl;     int anotherint = 6;          int *ptr2;     cout<<"*ptr2 = "<<*ptr2<<endl;     *ptr2 = anotherint;           //+          int yetanotherint = 7;     int *ptr3;     ptr3 = &yetanotherint;     cout<<"*ptr3 = "<<*ptr3<<endl;     *ptr1 = *ptr2;            //危险的赋值     cout<<"*ptr1 = "<<*ptr1<<endl;}

我自己试了一下,跳出段异常,去掉注释"+"的那行后,可以输出,为什么?这句有什么毛病?




[解决办法]
*ptr2 = anotherint;//ptr2未赋值,行为不明
[解决办法]
有些内存段是只读的
[解决办法]
在C++创建指针的时候,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。由于野指指针在声明的时候并未初始化,它可能是任何值。可能会导致一些最隐匿、最难以跟踪的BUG。所以声明指针的时候最好进行初始化。
[解决办法]
跳出段异常,去掉注释"+"的那行后,可以输出,为什么?这句有什么毛病?

跳出段异常,是因为ptr2没有开辟空间,所有没有空间来容纳anotherint。
注释以后可以,因为此ptr2的值是随机的(由系统确定的),所有可以输出,但是值是随机的

热点排行