Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
fscanf上的Segfault_C - Fatal编程技术网

fscanf上的Segfault

fscanf上的Segfault,c,C,FileNameList是一个具有两个文件指针的结构。合并对这两个文件服务器进行排序。我在while(fscanf(filenamelist[0].file1、“%d”、&chd)!=EOF)上收到一个segfault。我认为这是因为我没有正确实现pthread。我一直在尝试调试,所以任何帮助都将不胜感激。tempf是合并排序数组的文件ptr。它在合并函数本身中倒带 for(i=0; i<size; i++) { if(argc==1) { char* t

FileNameList是一个具有两个文件指针的结构。合并对这两个文件服务器进行排序。我在while(fscanf(filenamelist[0].file1、“%d”、&chd)!=EOF)上收到一个segfault。我认为这是因为我没有正确实现pthread。我一直在尝试调试,所以任何帮助都将不胜感激。tempf是合并排序数组的文件ptr。它在合并函数本身中倒带

 for(i=0; i<size; i++)
{
    if(argc==1)
    {
        char* tedious2 = (char*) malloc((strlen(argv[i+1]+7))*sizeof(char));
        strcpy(tedious2,argv[i+1]);
        filenamelist[i].file1 = fopen(strcat(tedious2,".sorted"),"r");
        filenamelist[i].file2 = NULL;
        filenamelist[i].alone = 1;
        free(tedious2);
        break;
    }
    else if(size-1 ==i && size%2 != 0)
    {
        char* tedious1 = (char*) malloc((strlen(argv[i+1]+7))*sizeof(char));
        strcpy(tedious1,argv[i+1]);
        filenamelist[i].file1 = fopen(strcat(tedious1,".sorted"),"r");
        filenamelist[i].file2 = NULL;
        filenamelist[i].alone = 1;
        free(tedious1);
    }
    else
    {
        char* tedious3 = (char*) malloc((strlen(argv[i+1]+7))*sizeof(char));
        strcpy(tedious3,argv[i+1]);
        char* tedious4 = (char*) malloc((strlen(argv[i+2]+7))*sizeof(char));
        strcpy(tedious4,argv[i+2]);
        filenamelist[i].file1 = fopen(strcat(tedious3,".sorted"),"r");
        filenamelist[i].file2 = fopen(strcat(tedious4,".sorted"),"r");
        filenamelist[i].alone = 0;
        free(tedious3);
        free(tedious4);
    }
}
for(i=0;i=0)
{
i=0;
pthread_t*threadid2;
threadid2=(pthread_t*)malloc(sizeof(pthread_t)*size);
为了
这样做:

char *tedious2 = malloc( strlen(argv[i+1]) + strlen(".sorted") + 1 );

Was
filenamelist[0]。file1
文件已被处理,较早时已打开?按filehandled是指已访问?是的,我已初始化它。我将用代码编辑问题。我认为argv[i+1]也不对,它位于
if(argc==1){}
块内。因此argv[xxx]可能是空指针或更糟的。不,我指的是结尾处空终止符的+1。希望在他的程序中
size
argc-2
。这很简单(你注意到+7在{}内了吗,这意味着他实际上分配的字节少了7个(考虑到argv[xxx]足够长?)但是argc逻辑似乎也错了。无论如何,它几乎不可读。
char* tedious2 = (char*) malloc((strlen(argv[i+1]+7))*sizeof(char));
char *tedious2 = malloc( strlen(argv[i+1]) + strlen(".sorted") + 1 );