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

时间:2011-04-20 19:21:50

标签: c++ string hex glibc

嘿,大家好。我正在用C ++编写一个十六进制计算器。操作必须“手动”完成,因为要求程序能够处理40位操作数(并且16 ^ 40比长长度可以处理的大得多)。

但是,我遇到了一些问题。在我的Mac(OS X 10.6)上,我可以使用终端中的Xcode和g ++编译并运行良好。我甚至在Windows上有一个使用Dev C ++的朋友说它运行正常。但是,如果我通过SSH连接到我学校的Sun集群,我会运行g ++并运行应用程序,但是经过一些操作后它会崩溃:

"*** glibc detected *** ./a.out: free(): invalid pointer: 0xb786e6f4 ***".

我猜太阳群是我教授使用的,也就是我失去分数的原因。

我不确定为什么会发生这种情况,因为我没有明确地使用内存分配,而且从我读过的所有错误中,通常(并非总是)尝试删除未编写的内容的结果与新的运营商。我想知道是否感谢我正在做的来回的字符串/字符转换,但是对我来说仍然令人费解的是它在几个案例中运行正常然后就死了。

基本上这个程序的工作是询问文件名,读取文件并根据需要完成的每个字符串解释,然后进行数学运算直到文件结束。

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

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

我已经用char数组改进了一些字符串,这似乎让我得到了这两个操作,但是我很困惑。谢谢你的眼光,每个人。所有回复都表示赞赏。

1 个答案:

答案 0 :(得分:3)

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

你溢出chr,这最有可能通过覆盖str使用的一些内部指针变量来影响std::string。当字符串被破坏时,它会尝试删除这个无效指针。

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