1

遵循断言不会失败,但根据我的理解它应该会失败。请纠正我。

#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?
}
4

2 回答 2

3

调用free不会改变指针的值。如果你想NULL释放内存,你必须自己做

void custom_free(int **temp){
      free(*temp); 
      *temp = NULL;
}
于 2013-11-10T22:03:44.913 回答
2

您不会“释放指针”,但可以释放指针引用的内存。这就是它的free作用:它不修改指针,它只对指针指向的东西做一些事情。

您的问题与free调用是否在函数中完成无关。尝试添加

*temp = 0;

在你free调用强制你得到一个空指针之后。

于 2013-11-10T22:03:47.147 回答