【发布时间】:2018-10-11 05:05:12
【问题描述】:
我只使用 main() 函数。不复制任何指针。 为什么 free() 函数没有得到 NULL 值? 为什么我可以检查我的wariable 是满还是空?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *e = NULL;
printf("before e=%p\n",(void *)e);
e = malloc(sizeof(int));
*e = 7;
printf("after, e=%p\n",(void *)e);
if(e == NULL) { printf("Problemy z pamięcia\n"); return 0; }
printf(" value = %d\n",*e);
free(e);
printf("after free, e=%p\n",(void *)e);
if(e == NULL) printf("is NULL\n");
return 1;
}
结果
before e=0
after, e=464027a0
value = 7
after free, e=0x7f82464027a0
为什么 if(e==NULL) 不正确?怎么做?
【问题讨论】:
-
为什么要得到一个NULL值?
-
因为我需要在 free() 之后检查它是 'e' 释放 free() 还是不是我的程序。有时我是否免费使用。关于“e”的信息是随机的,在下一行之后为空对我来说很重要
-
free只是释放与指针关联的内存。它不会将变量值设置为 NULL。您需要手动执行此操作。 -
@AlojzyDrabina - 为什么你认为你需要检查?您是否检查编译器是否正确执行算术?只是不要泄漏内存,并且无需信任。
-
更有理由勤奋并且不泄漏内存。您正在寻找一种语言/库解决方案来解决本质上是设计/编程问题。