1、
int *p = NULL;
void ds_free(void *p)
{
printf("ds_free:0x%x\n",p);
if(p)
{
free(p);
p = NULL;
}
printf("ds_free:0x%x\n",p);
}
int main(void)
{
p = (int *)malloc(4*sizeof(int));
printf("0x%x\n",p);
ds_free(p);
printf("0x%x\n",p);
}
注意运行结果,如下:
2、修正后代码
int *p = NULL;
void ds_free(void **p)
{
printf("ds_free:0x%x\n",*p);
if(*p)
{
free(*p);
*p = NULL;
}
printf("ds_free:0x%x\n",*p);
}
int main(void)
{
p = (int *)malloc(4*sizeof(int));
printf("0x%x\n",p);
ds_free(&p);
printf("0x%x\n",p);
}
第二份代码才是free后将指针指向NULL的代码,由于项目太忙了,后期再补充分析过程。