您的位置:首页 > 其它

两个指针指向同一个由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时,出现了如下错误:


这是怎么回事呢?

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: