c语言内存管理(内存泄漏和句柄泄露)

1,在c语言中,入参判断是很重要的一环,但是有时候入参的判断会导致内存泄漏或者是句柄泄露,我们来举例来说明吧!

(1)内存泄漏

int function_test1(int c)
{
	int* p = (int*)malloc*sizeof(int));
	assert(q != NULL)
	
	if( c < 0)
	{
		return -1; //这里需要free(p);
	}
	/***********
	if( c < 0)
	{
		free(p);
		p  = NULL;
		return -1; //这里需要free(p);
	}
	**********/
	
	free(p);
	return 0;
}

总结:
1) 每次申请内存前必须明确由谁负责释放,何时释放,在何处释放;
2) 在异常分支中,保持清醒,一定要在return语句前考虑是否要释放内存;
3) 内存申请后立即检查是否申请成功,不要多个指针用同一个if语句判断;
4) 申请内存成功后,禁止对指向给内存地址的指针重新赋值。

int function_test2()
{
	int* p = (int*)malloc*sizeof(int));
	int* q = (int*)malloc*sizeof(int));
	
	if( p == NULL || q == NULL)
	{
		return -1; //这里有可能需要free(p)或者free(q);
	}
	/************
	if (p == NULL && q != NULL) 
	{
		free(q);
		q = NULL;
		return -1;
	}
	else if(

你可能感兴趣的:(c语言基础)