无法从函数中释放指针

时间:2013-11-10 22:01:22

标签: c pointers memory

以下断言并没有失败,但根据我的理解,它应该失败。请纠正我。

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

2 个答案:

答案 0 :(得分:3)

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

void custom_free(int **temp){
      free(*temp); 
      *temp = NULL;
}

答案 1 :(得分:2)

您没有“释放指针”,但您可以释放指针引用的内存。这就是free的作用:它不会修改指针,它只会对指针指向的内容执行某些操作。

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

*temp = 0;

free调用后强制执行空指针。