C语言两个函数对比

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的代码,由于项目太忙了,后期再补充分析过程。

发布了91 篇原创文章 · 获赞 160 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/weixin_40204595/article/details/96154984