访问释放的指针变量时出现运行时错误

时间:2015-04-02 07:31:19

标签: c pointers free heap-memory

我有一个如下情况


#include <stdio.h>
int main(void) {
int *p1=NULL;
int a;
p1=&a;
printf("%p\n",p1);
   p1=NULL;
printf("%p\n",p1);
return 0;
}

在这种情况下,我完全没有问题。但如果我按照以下方式使用:


#include <stdio.h>
int main(void) {
int *p1=NULL;
int a;
p1=&a;
printf("%p\n",p1);
   free(p1);
 printf("%p\n",p1);
return 0;
}

在这种情况下,我得到了运行时错误,如下所示:

   

运行时错误时间:0内存:2052信号:11


我想知道为什么会这样。据我所知,解放了     指针将执行与分配NULL值相同的事情(当我们这样做时     free(p)它还删除指向内存的指针链接而不是删除     分配内存空间)。如果你能建议我,我宁愿你     任何事情。

    

先谢谢。

3 个答案:

答案 0 :(得分:1)

您正在尝试free()根本没有分配的内存,这会导致未定义的行为。

因此,您需要在malloc()调用之前free()

p1 = malloc(sizeof(int));

答案 1 :(得分:1)

free(p1);未返回p1malloc()的{​​{1}}生成undefined behaviour

答案 2 :(得分:1)

您有未定义的行为:

你只能freemalloc编辑的内容。 p1指向堆叠分配内存,因此尝试free

使用*p1时也要小心:它与访问a的规则相同。在对其进行任何其他操作之前,您需要初始化a(使用a = ...或使用*p1 = ...指针)。否则程序行为未定义。