使用goto语句避免内存泄露

本文通过实例解析在C语言中如何有效避免内存泄露,重点在于利用goto语句来确保分配失败时释放已分配的内存空间。通过具体代码演示,强调在内存管理中的重要性和实践方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看下面的例子:

#include<stdio.h>
#include<stdlib.h>

void free_int(int *p)
{
	if( p != NULL)
	{
		free(p);
	}
}
int  main()
{   
	int ret = 0;
	int *p = NULL;
 	int *q = NULL;

	p = (int *)malloc(10000);
        if(p == NULL)
	{
		ret = -1;
		printf("func malloc error: %d(p == NULL)",ret);
		return ret;
	 }
	q = (int *)malloc(10000);
	if(p == NULL)
	{
		 ret = -1;
		 printf("func malloc error: %d(q == NULL)",ret);
		 return ret;
	}

	free_int(p);
	p = NULL;
	free_int(q);
	q = NULL;
	system("pause");
	return ret;
}

上面这段程序,只是做说明使用未实现任何功能:这段程序在什么时候会发生内存泄露呢?当q分配内存失败时候.if(p ==NULL)成立时候。函数直接return了。从而导致p所指向的内存空间泄露。这里我们可以借助goto 语句;

#include<stdio.h>
#include<stdlib.h>

void free_int(int *p)
{
	if( p != NULL)
	{
		free(p);
	}
}
int  main()
{   
	int ret = 0;
	int *p=NULL;
	int *q = NULL;

	p = (int *)malloc(100);
	if(p == NULL)
	{
		ret = -1;
		printf("func malloc error: %d(p == NULL)",ret);
		return ret;
	 }
	q = (int *)malloc(100);
	if(p == NULL)
	{
		 ret = -1;
		 printf("func malloc error: %d(q == NULL)",ret);
		 goto End;// goto End 而不是return
	}
End:
	free_int(p);
	p = NULL;
	free_int(q);
	q = NULL;
	system("pause");
	return ret;
}

当q分配内存失败时候.if(p ==NULL)成立时候。函数直接goto 到End 语句处了,就可以将内存空间释放到了,从而有效的避免内存泄露。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值