指针作为函数参数传递时只是传递了指针所指向的地址,将其赋给一个临时变量,修改的也是该地址的的内容,但是指针本身并没有修改,置NULL也只是修改的临时变量。所以需要利用双重指针才能将它传递进去进行修改,实例如下。
#include<stdio.h>
#include<stdlib.h>
void _free_p_(void **ptr)
{
if (*ptr == NULL)
return;
free(*ptr);
*ptr = NULL;
}
int main(void)
{
char *addr;
addr = (char*)malloc(10*sizeof(char));
strcpy(addr ,"test");
printf("addr = %s\n",addr);
_free_p_(&addr);
if(addr == NULL)
printf("ok\n");
else
printf("erro\n");
return 0;
}