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);
	
	
}

注意运行结果,如下:

C语言两个函数对比_第1张图片

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);
}

C语言两个函数对比_第2张图片

第二份代码才是free后将指针指向NULL的代码,由于项目太忙了,后期再补充分析过程。

 

你可能感兴趣的:(C语言琐碎的知识点积累)