检测到 glibc,但我没有使用动态内存?

glibc detected, but I'm not using dynamic memory?

本文关键字:动态 内存 glibc 检测      更新时间:2023-10-16

大家好。我正在用c++写一个十六进制计算器。这些操作必须"手工"完成,因为要求程序能够处理40位的操作数(16^40比long - long所能处理的大得多)。

我有一点问题,虽然。在我的Mac (OS X 10.6)上,我可以在终端中使用Xcode和g++进行编译和运行。我甚至有一个在Windows上使用Dev c++的朋友说它运行得很好。但是,如果我SSH到我学校的Sun集群,i++和应用程序可以运行,但是在使用

进行几次操作后,它就崩溃了:
"*** glibc detected *** ./a.out: free(): invalid pointer: 0xb786e6f4 ***".

我猜太阳星团是我的教授用的,所以我丢了分。

我不确定为什么会发生这种情况,因为我没有显式地使用内存分配,并且从我所读到的这个错误中,它通常(并不总是)是试图删除一些不是用new操作符生成的东西的结果。我想知道这是否要归功于我正在做的来回字符串/字符转换,但它仍然让我感到困惑,它在一些情况下运行良好,然后死亡。

基本上这个程序所做的就是请求文件名,读取文件并根据需要解释每个字符串,然后进行数学运算直到文件结束。

下面是我的代码:http://pastebin.com/1DW5pd6p

这是我使用的数据文件(再次注意我的程序在第二次操作后死亡):http://pastebin.com/xx59eQsu

我已经用字符数组改造了一些字符串,这似乎让我得到了这两个操作,但是我很困惑。谢谢大家的关注。

string str;
char chr[1];
...
sprintf(chr, "%u", sum);

你溢出chr,这很可能影响str覆盖std::string使用的一些内部指针变量。当解构字符串时,它会尝试删除这个无效指针。

确保chr足够大-例如,char chr[32];应该足够打印积分。