爲什麼我要在我的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