如何在linux中找到堆栈溢出问题?

bba*_*zso 2 c++ debugging overflow

我正在使用第三方库编译我的应用程序,似乎有一些奇怪的行为表明堆栈溢出问题(这只是猜测).

但是,当我崩溃应用程序的行运行正常后,我添加一个print语句.如果我删除了print语句(一个简单的cout <<"print something"<< endl;语句),应用程序崩溃了

0x00007f48f2027276 in free () from /lib64/libc.so.6
Run Code Online (Sandbox Code Playgroud)

我尝试添加以下char数组来代替print语句,这也停止了崩溃,然后我尝试打印char数组的内容:

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]);
}
Run Code Online (Sandbox Code Playgroud)

看看数组中的任何内容是否被破坏,但这种方法不起作用.所以我想知道是否有更好的方法来检测这是否是堆栈溢出问题?

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

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

Ign*_*ams 5

编译-fstack-protector-all将使程序让你知道堆栈是否被粉碎.