我想问一下,如果我有一个指向某个结构的指针,但是我释放(struct)然后如果我取消引用指针,它会指向NULL吗?我可以检查,指针!= NULL或未定义?
谢谢!
答案 0 :(得分:2)
在指针上调用free()不会改变指针值。它仍将指向不再属于您的应用程序的相同内存。您应该在释放后立即为free'd指针指定NULL,以确保不再使用它。
void *p = malloc(10); // p points to allocated memory
free(p); // p still points to invalid memory
p = NULL; // good practice
答案 1 :(得分:1)
考虑以下代码
int main()
{
int *p = (int *)malloc(sizeof(int) * 10);
free(p);
}
这里变量p是函数main
的局部变量。该变量的大小为4字节(32位m / c)或8字节(64位m / c)。现在我们正在分配用于存储10个整数元素的内存,并且该地址存储在变量p
中。现在我们调用自由函数,我们传递的动态内存地址存储在局部变量p
中。现在,自由函数将释放内存,并且无法将NULL
分配给变量p
。因为我们将地址作为值传递,而不是引用指针。
我们可以为free
定义一个包装函数,如下所示
void myfree(void **p)
{
free(*p);
*p = NULL;
}
int main()
{
int *p = (int *)malloc(sizeof(int) * 10);
myfree(&p);
}
或者我们也可以定义宏功能
#define MYFREE(x) \
free(x); \
x = NULL;
答案 2 :(得分:0)
未定义。 C没有定义它对指针内容的作用,尽管大多数实现都不做任何事情。
答案 3 :(得分:-1)