无论我尝试什么,我都会在这个函数的某个地方遇到一个seg错误。
int build_playlist(Song playlist[], char* inputFiles[], int numInputFiles)
{
int i = 0;
int j = 0;
for( j = 0; j < numInputFiles; j++ )
{
FILE *file = fopen(inputFiles[j], "r");
if (file == NULL)
{
printf("File could not be opened.\n");
return -1;
}
while (1)
{
if (feof(file))
{
break;
}
fscanf(file, "%s %s %s %d", playlist[i].artist, playlist[i].title, playlist[i].album, &playlist[i].rating);
i++;
}
fclose(file);
numInputFiles++;
}
return i;
}
答案 0 :(得分:2)
你正在增加numInputFiles,因为这个j总是&lt; numInputFiles。这会导致无限循环,这将导致您访问不应该访问的内存。
这里有几件事可能会出错:
答案 1 :(得分:0)
你有一个无限循环,肯定会超出界限。
for( j = 0; j < numInputFiles; j++ )
{
FILE *file = fopen(inputFiles[j], "r");
到目前为止看起来还不错。但遗憾的是,在循环结束时你会这样做:
numInputFiles++;
}
如果你在循环中递增它们, j
永远不会超过numInputFiles
。您可能想要删除numInputFiles++;
行。
此外,我们无法看到playlist
数组的声明,但由于您无法检查playlist
的大小,因此您可能还存在访问越界的风险。