70,022
社区成员




#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("vbvvvvvvvvvvvv\n");
return 0;
}
注意指针本身的地址和指针的指针的地址关系
你的_free_P函数 虽然也是传的是地址, 但是地址也是一个值,
它只能保证对它地址的内容修改有效,不能保证对它的地址地址本身有效的,
它的本身也是拷贝一份地址的值给到函数接口的!
好好理解下
#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("vbvvvvvvvvvvvv\n");
return 0;
}