【发布时间】:2015-09-16 18:37:32
【问题描述】:
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++ 编译。
编辑
好吧,在从 main 返回后,我似乎不知何故让程序处于关于流的无效状态(谢谢)。我确实打电话给
std::ifstream in(argv[1]);
std::cin.rdbuf(in.rdbuf());
std::ofstream out(argv[2]);
std::cout.rdbuf(out.rdbuf());
在从 main 返回之前,我需要在这里做些什么来清理吗?
【问题讨论】:
-
您是否以某种方式明确地销毁了
std::cout(或任何其他具有静态存储持续时间的std::ostream)或对它做了什么奇怪的事情? -
使用返回全局的函数,来缓解全局初始化的失败。
-
我确实打电话给
std::ofstream out(argv[2]); std::cout.rdbuf(out.rdbuf());
标签: c++ segmentation-fault valgrind iostream