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尝试从管道读取fgetc_C_Process_Segmentation Fault_Fgetc - Fatal编程技术网

SEGFAULT尝试从管道读取fgetc

SEGFAULT尝试从管道读取fgetc,c,process,segmentation-fault,fgetc,C,Process,Segmentation Fault,Fgetc,目前,我有一个给孩子的父进程管道信息,并通过fgetc读取他们的标准输出。我循环了几轮,使用fdopen存储第一轮的文件指针,并在下一轮中再次调用它 问题是,在第一轮中,read\u行的读取结果非常精细,但在第二轮中,fgetc遇到SEGFULT 错误消息: Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7791330 in __GI___uflow (fp=0x6041b0) at genops.c:381 38

目前,我有一个给孩子的父进程管道信息,并通过
fgetc
读取他们的标准输出。我循环了几轮,使用
fdopen
存储第一轮的文件指针,并在下一轮中再次调用它

问题是,在第一轮中,
read\u行
的读取结果非常精细,但在第二轮中,fgetc遇到SEGFULT

错误消息:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7791330 in __GI___uflow (fp=0x6041b0) at genops.c:381
381     return *(unsigned char *) fp->_IO_read_ptr++;
阅读功能:(我知道这不是最好的) 澄清。它第一次起作用。为什么第二天就不行了? 许多其他问题似乎只是有一个不同的错误

char* read_line(FILE* file,int currentP, Players *players) {
    char* result = malloc(sizeof(char) * 80);
    int position = 0;
    int next = 0;
    for (int i = 0; i < players->players[currentP].position; i++) {
        next = fgetc(file);
    }
    while (1) {
        next = fgetc(file);
        //players->players[currentP].position++;
        if (next == '!') {
            return "!";
        }
        if (next == EOF || next == '\n') {
            result[position] = '\0';
            return result;
        } else {
            result[position++] = (char)next;
        }
    }  
}
char*read_行(文件*FILE,int-currentP,播放器*Players){
char*result=malloc(sizeof(char)*80);
int位置=0;
int next=0;
对于(int i=0;iplayers[currentP]。位置;i++){
next=fgetc(文件);
}
而(1){
next=fgetc(文件);
//玩家->玩家[currentP]。位置++;
如果(下一步=='!'){
返回“!”;
}
如果(next==EOF | | next=='\n'){
结果[位置]='\0';
返回结果;
}否则{
结果[位置++]=(字符)下一步;
}
}  
}

如果没有检查缓冲区溢出,则可能存在重复。当在调试器中捕获崩溃时,它发生在代码的何处?您读取的输入是什么?如何调用函数?请尝试创建一个。另外,请。可能文件处理程序已关闭,您试图从损坏的处理程序中读取。因此,错误不在函数中,而是在上面的代码中。警告,当返回
“!”
时,您丢失了分配内存的位置,并且您将无法
释放()
what
read\u line
returns。问题是我的结果变量没有被memset设置回空字符串,因此它遇到了segfault。添加memset解决了我的问题,但我将尝试修复内存泄漏。可能的副本没有检查缓冲区溢出。当在调试器中捕获崩溃时,它发生在代码的何处?您读取的输入是什么?如何调用函数?请尝试创建一个。另外,请。可能文件处理程序已关闭,您试图从损坏的处理程序中读取。因此,错误不在函数中,而是在上面的代码中。警告,当返回
“!”
时,您丢失了分配内存的位置,并且您将无法
释放()
what
read\u line
returns。问题是我的结果变量没有被memset设置回空字符串,因此它遇到了segfault。添加memset解决了我的问题,但我将尝试修复内存泄漏。