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