您的位置:首页 > 编程语言 > C语言/C++

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*指针的内存区读取数据的。但是输出的是乱码,因为内存改变。




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  指针 c++ c malloc strcpy