检测到 glibc,但我没有使用动态内存?
glibc detected, but I'm not using dynamic memory?
大家好。我正在用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];
应该足够打印积分。
相关文章:
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- c++ 动态内存 堆栈中的分配
- 给定特定内存地址的数组的动态内存分配
- 释放动态内存时C++错误
- 我刚刚了解了C++中的动态内存分配
- 无法删除布尔动态内存分配
- 有没有办法找到动态内存大小,比如大小?
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 具有对齐存储的动态内存分配
- 指向数组unique_ptr在调用 release() 后会自动释放动态内存,这是真的吗?
- 在cpp中使用boost-python的python代码是否进行动态内存分配
- 我应该在这个程序中使用静态内存分配还是动态内存分配
- C++ 模板函数中的动态内存分配
- 指向动态内存中结构中的变量时出现问题
- C++具有动态内存分配的 constexpr 函数
- 动态内存分配错误
- 按引用传递和动态内存分配之间的区别是什么