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

标签 c++ string hex glibc

大家好。我正在用 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/

相关文章:

C++实现

asp.net - 将 html 字符串转换为 ASP.Net 中的服务器控件

php - 字符串中最接近特定短语的数字

javascript - 在 Javascript 中为给定的 HEX 值创建线性渐变

Java位比较,bitset?

C++ rest sdk POST 表单数据json

c++ - 将字符串的地址与 NULL 进行比较

c++ - 基类在被访问时未初始化

java - 如何测试字符串是否等于 "x"|| "X"?

MySQL - 是十六进制