当segfault标准输出重定向未在文本文件中捕获时的C程序 #包括 #包括 #包括 int main(int argc,char*argv[]){ printf(“你好,伙计”\n); //故障原因 *(int*)0=0; 返回0; } gcc测试.c-o测试 ./test&>out.txt 分段故障(堆芯转储) /test>out.txt 分段故障(堆芯转储) /测试1>out.txt 分段故障(堆芯转储)
打开文本文件,就不会写“hello dude”。如果您注释掉导致segfault的行,那么“hello dude”将写入文件。一些关于SEGFULT如何中断stdout的信息。命令行上是否有可以捕获输出的内容?我尝试了cygwin bash和linux bash shell。添加当segfault标准输出重定向未在文本文件中捕获时的C程序 #包括 #包括 #包括 int main(int argc,char*argv[]){ printf(“你好,伙计”\n); //故障原因 *(int*)0=0; 返回0; } gcc测试.c-o测试 ./test&>out.txt 分段故障(堆芯转储) /test>out.txt 分段故障(堆芯转储) /测试1>out.txt 分段故障(堆芯转储),c,linux,cygwin,C,Linux,Cygwin,打开文本文件,就不会写“hello dude”。如果您注释掉导致segfault的行,那么“hello dude”将写入文件。一些关于SEGFULT如何中断stdout的信息。命令行上是否有可以捕获输出的内容?我尝试了cygwin bash和linux bash shell。添加 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char* argv[]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]) {
printf("hello dude\n");
//cause segfault
*(int*)0 = 0;
return 0;
}
gcc test.c -o test
./test &> out.txt
Segmentation fault (core dumped)
./test > out.txt
Segmentation fault (core dumped)
./test 1> out.txt
Segmentation fault (core dumped)
在
printf
工作后为什么将int指针强制转换为0并尝试取消引用它并将0分配给它?它指向的是它不拥有的内存,因此它因segfault而崩溃。@t0mm13b这就是它的意图。另外,请注意重定向,它并不是真正指向文件,请看符号,您是将此作为后台作业运行的。您确定在printf(“hello dude\n”)中有换行符吗代码>?在MSVC中,它在崩溃之前打印消息。您是否尝试过fflush(stdout)代码>导致segfault以解决另一个问题。我有一个更大的程序,太大了,无法发布,这导致了segfault,我也有正在输出的printf语句,但我无法查看它们,因为我无法将输出重定向到文本文件。所以我发布了这个较小的程序,并人为地造成了一个segfault来证明stdout正在被重定向到测试文件。
fflush(stdout)