为什么我要在我的saferFree(void **)函数中使用指向指针的指针?为什么下面的代码does'n免费的IP指针?为什么我的free()包装函数不起作用?
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
void saferFree(void *);
int main()
{
int *ip;
ip = (int*) malloc(sizeof(int));
*ip = 5;
saferFree(ip);
return 0;
}
void saferFree(void *pp){
if((void*)pp != NULL){
free(pp);
pp = NULL;
}
}
上面的代码不会自由的PP指针,但下面的代码与双指针正常工作。我想知道为什么?
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
void saferFree(void **);
int main()
{
int *ip;
ip = (int*) malloc(sizeof(int));
*ip = 5;
saferFree(&ip);
printf("%p", ip);
return 0;
}
void saferFree(void **pp){
if(*pp != NULL){
free(*pp);
*pp = NULL;
}
}
什么不行? –
请显示你看到的部分'。它不释放分配的内存.'有些人感到困惑。 –
我怀疑问题是OP期望指针'ip' main()是'NULL',因为它在'safeFree()'中设置为'NULL'。 'pp'本地于'safeFree()',所以它不会在main()中反映出来。看到这个帖子以及:http://stackoverflow.com/questions/13431108/changing-address-contained-by-pointer-using-function – usr