Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当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 - Fatal编程技术网

当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 分段故障(堆芯转储)

当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[]

打开文本文件,就不会写“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[]) {
        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)