Tyl*_*ler 4 c++ redirect stdout segmentation-fault
我有一个C++单元测试,它产生stderr的有用输出,主要是噪声(除非我正在调试)到stdout,所以我想将stdout重定向到/ dev/null.
奇怪的是,这样做似乎会导致分段错误.
是否有任何理由为什么代码可能会出现">/dev/null"错误,否则运行正常?
printf如果有任何方位,输出完全由s 产生.
我很难发布有问题的代码,因为它是提交出版的研究.我希望基于这种描述有一个"明显的"可能的原因.
段错由这样的代码引起:
ArrayElt* array = AllocateArrayOfSize(array_size);
int index = GetIndex(..) % array_size;
ArrayElt elt = array[index];
Run Code Online (Sandbox Code Playgroud)
无数次,我忘记了x % y当xC/C++中为负数时仍为负数.
好的,那么为什么只有在我重定向时才会发生/dev/null?我的猜测是我访问的无效内存地址是stdout的输出缓冲区 - 并且在不需要时不分配此缓冲区.
谢谢你的好答案!
这并不完全回答你的问题,但它可以.你尝试过使用gdb吗?它是一个命令行调试工具,可以找到发生段错误的位置.它相当容易使用.这是一个关于如何使用它的非常深入的教程.
当标准输出重定向到 /dev/null 时,stdout 的 I/O 没有“正常”原因触发核心转储。
您很可能有一个流浪指针或缓冲区溢出,当发送到 /dev/null 时触发核心转储,而不是发送到标准输出时触发核心转储 - 但如果没有代码,将很难发现问题。
通常将有用信息放在标准输出上,将噪声放在标准错误上。
| 归档时间: |
|
| 查看次数: |
2655 次 |
| 最近记录: |