两个指针指向同一个由malloc分配的空间,free掉一个问题
2015-10-16 16:22
337 查看
#include <stdio.h> #include <stdlib.h> int main(void) { int *p1; int *p2; p2=p1=malloc(sizeof(int)); printf("Please input a number:\n"); scanf("%d", p1); free(p1); printf("%d\n", *p2); return 0; }参见上例代码,两个指针p1、p2指向同一个由malloc分配的空间,free掉p1,引用p2时,出现了如下错误:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/12/4ad8f640abc6d8269956dcd0eb6b5868.jpg)
这是怎么回事呢?
free对应着malloc,当你malloc一块内存时,相当于机器将这块内存借给你,你可以随意使用这块内存,其他程序就不会使用这块内存。而一旦free后,相当于将这块内存还给了机器,机器就可以将这块内存借给其他程序了。p2还是指向了这块内存,成为了野指针,一旦对其进行操作,很可能会破坏其他使用这块内存的程序的数据。
那么如何规避这种风险呢?
可以先将要释放的指针指向NULL,再free。即
#include <stdio.h> #include <stdlib.h> int main(void) { int *p1; int *p2; p2=p1=malloc(sizeof(int)); printf("Please input a number:\n"); scanf("%d", p1); //先将p1指向NULL再释放 p1=NULL; free(p1); printf("%d\n", *p2); return 0; }
相关文章推荐
- <LeetCode><Easy> 160 Intersection Of Two Listed Lists
- openssl框架闲谈--BIO接口
- openssl框架闲谈--BIO接口
- 我的第一篇CSDN
- leetcode之Two Sum
- android针对json数据解析方法实例分析
- Observer模式,即观察者模式
- Maven 构件工程的属性文件-----pom.xml文件
- cms完整视频教程+源码 孔浩老师 全131讲
- Android开发之监听或获取手机短信内容
- UIView hitTest:withEvent:方法流程
- 【Splay】bzoj 3223 文艺平衡树
- wire与reg的区别?转载大神!
- 高可用集群实验四:DRBD+corosync+pacemaker
- 100到200之间的素数输出(初)
- 矩阵论、组合数学基础
- Android性能优化之一:ViewStub
- 推荐几个Android自定义的进度条(补充)
- 简单实用的pdf转换成txt格式的方法
- 工作感想