以下断言并没有失败,但根据我的理解,它应该失败。请纠正我。
#include <stdio.h>
#include <assert.h>
void custom_free(int **temp){
free(*temp);
}
int main(){
int *ptr = malloc(1024);
custom_free(&ptr);
assert(ptr); // doesn't fails ..why?
}
答案 0 :(得分:3)
调用free
不会更改指针的值。如果你想NULL
释放内存,你必须自己做
void custom_free(int **temp){
free(*temp);
*temp = NULL;
}
答案 1 :(得分:2)
您没有“释放指针”,但您可以释放指针引用的内存。这就是free
的作用:它不会修改指针,它只会对指针指向的内容执行某些操作。
您的问题与free
调用是否在函数中完成无关。尝试添加
*temp = 0;
在free
调用后强制执行空指针。