全局变量与 *** glibc detected *** ./1: free(): invalid pointer错误

本文探讨了全局变量的使用问题,通过一个具体的例子展示了全局变量如何可能导致意外的内存泄露错误。在进行深度优先搜索的代码实现中,尽管全局变量i的使用与内存泄露无直接因果关系,但其导致的逻辑错误使得内存管理出现问题。通过分析,发现由于全局变量i的值在递归过程中未正确恢复,造成了后续free()操作的错误,提醒开发者注意全局变量在复杂逻辑中的使用风险。
摘要由CSDN通过智能技术生成

以前上课的时候,老师总是说全局变量不要随便用,当时也只是记得这个说法,至于为什么也没仔细研究。结果最近写代码的时候果断跪了。

其实内存泄露跟全局变量的使用没有因果关系,只不过是我在写代码的时候犯2了。下面是我在做深度优先搜索的时候写的一段代码:

void dfs(int c)
{
	//error 2
	int i;
	if(c == c2)
	{
		if(path == dist[c2])
		{
			count += 1;
			if(max < hand)
			{
				max = hand;
			}
		}
		return;
	}
	
	if(path > dist[c2])
		return;
	
	for(i=0;i<n;i++)
	{
		if(arcs[c][i]!=INFINITY && !s[i])
		{
			path += arcs[c][i];
			hand += teams[i];
			s[i] = 1;
			dfs(i);
			path -= arcs[c][i];
			hand -= teams[i];
			s[i] = 0;
		}
	}

}


 代码中的数组都是指针通过malloc动态申请的,这些指针都是全局变量。为了图方便,我把i,j这些变量也直接声明成全局变量了。结果问题来了。在DFS代码中忘记重新声明一个i变量用于迭代了,而i这个变量作为全局变量还在,导致编译的时候也不会找到这个错误。如果是C++倒是可能不会有这个问题,一般在for循环内部我都重新声明i变量。 

就算是i用的是全局变量࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值