解决valgrind内存错误不指向我的代码
Solving valgrind memory error not pointing to my code
Valgrind给了我这个:
==26348== Invalid read of size 8
==26348== at 0x4EC3DA8: std::ostream::flush() (in /usr/lib64/libstdc++.so.6.0.19)
==26348== by 0x4E9E477: std::ios_base::Init::~Init() (in /usr/lib64/libstdc++.so.6.0.19)
==26348== by 0x5684E58: __run_exit_handlers (in /lib64/libc-2.17.so)
==26348== by 0x5684EA4: exit (in /lib64/libc-2.17.so)
==26348== by 0x566DAFB: (below main) (in /lib64/libc-2.17.so)
==26348== Address 0xffefffd98 is just below the stack ptr. To suppress, use: --workaround-gcc296-bugs=yes
我如何找到这个错误是在我的代码,如果它不指向任何行?
我在AWS的Linux实例上使用g++进行编译。
编辑
好吧,似乎不知何故,我离开了程序在一个无效的状态关于流(谢谢)从主返回后。我确实打电话给
std::ifstream in(argv[1]);
std::cin.rdbuf(in.rdbuf());
std::ofstream out(argv[2]);
std::cout.rdbuf(out.rdbuf());
在从main返回之前,我需要在这里做什么来清理吗?
它实际上是由exit触发的:你的main函数完成了它的工作,程序处于清理阶段,比如调用全局对象的析构函数和关闭流。
错误本身很可能在代码的早期某个地方,使程序处于某种无效状态,仅在最后才成为问题。
在您的评论中,您说您将cout
的流缓冲区更改为您自己的东西。你后来把它设置回默认值了吗?否则,在main
结束时,当程序试图flush
到std::cout
时,它可能会访问不再存在的流缓冲区。
参见示例:http://www.cplusplus.com/reference/ios/ios/rdbuf/
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么我的代码在输出中增加了93天
- 0-1背包代码中的错误.我的代码中有什么错误
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 在我的代码中,获得最大的Pair Wise产品C++和输出并不总是正确的
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 我的代码运行良好,但在游戏循环中中断
- 如何使用递归循环我的代码(当用户输入无效输入时,它会再次提示他们)?
- 我认为我的代码很好,但它在 cin a 之后停止并且没有进一步?
- 我的代码中的意外价值以及我如何修复它
- 为什么 rand 不在我的代码中生成随机数?
- 编写了一个C++代码来检查表达式是否具有平衡括号并且我的代码未运行.我已经卡了一天了
- 如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)
- 无法找出我的代码中的内存泄漏
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- 我正在尝试创建一个菜单,但我的代码一直在循环