大家好。我正在用 C++ 编写一个十六进制计算器。这些操作必须“手动”完成,因为要求程序能够处理 40 位操作数(16^40 比 long long 可以处理的大得多)。
不过,我遇到了一点问题。在我的 Mac (OS X 10.6) 上,我可以在终端中使用 Xcode 和 g++ 编译并运行良好。我什至有一个在 Windows 上使用 Dev C++ 的 friend 说它运行良好。但是,如果我通过 SSH 连接到我学校的 Sun 集群,我 g++ 并且应用程序运行,但在一些操作后它崩溃了:
"*** glibc detected *** ./a.out: free(): invalid pointer: 0xb786e6f4 ***".
我猜我的教授使用的是 Sun 集群,这也是我失分的原因。
我不确定为什么会发生这种情况,因为我没有明确使用内存分配,而且从我读到的所有关于这个错误的信息来看,这通常(不总是)是试图删除一些未创建的东西的结果与新的运营商。我想知道这是否归功于我正在进行的来回字符串/字符转换,但令我感到困惑的是它在某些情况下运行良好然后就死机了。
基本上这个程序所做的是询问一个文件名,读取文件并根据需要做的事情解释每个字符串,然后计算直到文件结束。
这是我的代码:http://pastebin.com/1DW5pd6p
这是我使用的数据文件(再次注意我的程序在第二次操作后死掉):http://pastebin.com/xx59eQsu
我已经用 char 数组改造了一些字符串,这似乎让我可以进行这两个操作,但老兄,我很困惑。谢谢大家的关注。感谢所有回复。
最佳答案
string str;
char chr[1];
...
sprintf(chr, "%u", sum);
您正在溢出 chr
,这很可能会通过覆盖 std::string
使用的一些内部指针变量来影响 str
。当字符串被破坏时,它会尝试删除这个无效指针。
确保 chr
足够大 - 例如char chr[32];
应该足以打印积分。
关于c++ - 检测到 glibc,但我没有使用动态内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5735532/