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

本文探讨了C语言编程中如何防止内存泄漏和句柄泄露问题。强调了在申请内存前确定释放责任、异常处理时释放内存、避免多个指针共用同一释放判断以及分配内存成功后不改变指针值的重要性。同时,举例说明了在处理句柄时,异常返回前确保关闭文件句柄的必要性。
摘要由CSDN通过智能技术生成

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 =
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌上花开缓缓归以

你的鼓励将是我创作的最大动力,

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值