C/C++中野指针的问题
2014-07-20 09:09
411 查看
野指针是什么,简单的说就是当你释放申请的内存时,没有把指针清空,指针依然存在。只不过指针指向的内存区不属于他。
野指针会在退出程序时销毁
打个比方,你有一个房子,你卖掉了,但是你依然可以用你备用的钥匙来打开,尽管房子不是你的(呵呵);这是很危险的。
野指针如何产生?如何避免?
当我们在定义一个指针的时候,如果没有给指针赋初值,就会产生野指针。
所以定义指针如最好赋初值。如 int *a=NULL;
当我们释放掉指针时(用free或delete时),如果没有清空指针也会产生野指针。
所以:
...
free(p);
p=NULL;
看一下以下代码。
char *str=NULL;
str=(char *)malloc(10);//给指针分配10字节内存
strcpy(str,"abc");//给str赋值
free(str);
cout<<str<<endl;//输出字符串(标记1)
str=NULL;
我们知道尽管释放了指针*str,但是在没有清空之前还是可以读取str*指针的内存区读取数据的。但是输出的是乱码,因为内存改变。
野指针会在退出程序时销毁
打个比方,你有一个房子,你卖掉了,但是你依然可以用你备用的钥匙来打开,尽管房子不是你的(呵呵);这是很危险的。
野指针如何产生?如何避免?
当我们在定义一个指针的时候,如果没有给指针赋初值,就会产生野指针。
所以定义指针如最好赋初值。如 int *a=NULL;
当我们释放掉指针时(用free或delete时),如果没有清空指针也会产生野指针。
所以:
...
free(p);
p=NULL;
看一下以下代码。
char *str=NULL;
str=(char *)malloc(10);//给指针分配10字节内存
strcpy(str,"abc");//给str赋值
free(str);
cout<<str<<endl;//输出字符串(标记1)
str=NULL;
我们知道尽管释放了指针*str,但是在没有清空之前还是可以读取str*指针的内存区读取数据的。但是输出的是乱码,因为内存改变。
相关文章推荐
- 详细的讲解C/C++指针和内存问题的文章
- 指针操作超越变量作用范围的问题(高质量c++)
- C/C++中指针和引用之相关问题研究
- c++之指针作为函数参数传递的问题
- C/C++中指针和引用之相关问题研究
- 编程经验点滴(三)——《C、C++中指针加 1 的问题》
- c++中的指针和引用的使用问题
- C++ : 指针及其有关的问题
- C/C++中的二维指针问题
- 关于实例声明:C++中指针常量和常量指针的问题
- 关于C++异常抛出指针问题的探讨
- 关于c++ 函数指针的问题
- C++经典指针问题[转帖]
- C++ : 指针及其有关的问题
- C++里面多继承带来的指针漂移问题(转)
- c++指针问题
- C、C++中指针加1的问题
- C++里面多继承带来的指针漂移问题
- c++指针相等的问题
- C/C++"野指针"问题总结