linux下堆栈溢出实例,如何在Linux中发现堆栈溢出问题?

我正在编译我的应用程序与第三方库,似乎有一些怪异的行为,表明堆栈溢出问题(这只是一个猜测)。如何在Linux中发现堆栈溢出问题?

但是,当我在添加打印语句后崩溃的应用程序运行良好。如果我删除打印语句(一个简单的COUT <

0x00007f48f2027276 in free() from /lib64/libc.so.6

我尝试添加下面的字符数组来代替print语句,这应用程序崩溃停止崩溃,以及,我再尝试打印的字符数组的内容:

char ben[8000] = {0};

memset(&ben, 0, sizeof (ben));

for (int y = 0; y < 8000; ++y)

{

if (ben[y] != 0)

PRINT ("CHAR[%d]=%d", y, ben[y]);

}

,看看如果阵列中的任何东西被损坏,但这种做法没有奏效。所以我想知道是否有更好的方法来检测这是否是堆栈溢出问题?

我用-fstack-protector-all(lib和我的代码)重新编译了这个应用程序,但这没有任何东西。我也试过valgrind,它没有给我任何看起来可疑的东西。

它似乎是崩溃,因为我试图释放一个无效的指针,但我不知道为什么指针无效,因为它释放了一个局部变量(即当它超出范围)。指针由于某种原因被损坏,但有点像在大海捞针中寻找针。有没有什么好的技术可以尝试并聚合在这类问题上?非常感谢!

2010-02-10

bbazso

+1

你所看到的是堆腐败的典型症状。错误几乎肯定不在崩溃发生的代码中,甚至不在崩溃的代码附近。 –

2010-02-10 20:40:28

+0

那么我该如何诊断呢? –

2010-02-10 21:05:23

+0

Valgrind不会找到堆腐败问题(即如果我错误地删除了两次),那么为什么你会说这是一个堆问题? –

2010-02-11 14:49:29

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值