C++ 为什么我在这个函数中遇到seg故障?

C++ 为什么我在这个函数中遇到seg故障?,c++,C++,不管我怎么做,我总是在这个函数的某个地方出现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 (fil

不管我怎么做,我总是在这个函数的某个地方出现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;
}
int-build\u播放列表(歌曲播放列表[],char*inputFiles[],int-numInputFiles)
{
int i=0;
int j=0;
对于(j=0;j
您得到了一个无限循环,肯定会访问到边界之外

for( j = 0; j < numInputFiles; j++ )
{
    FILE *file = fopen(inputFiles[j], "r");
j
将永远不会大于
numInputFiles
,如果您在循环中同时增加这两个文件。您可能想要删除
numInputFiles++


我们也看不到
播放列表
数组的声明,但是由于您没有检查
播放列表
的大小,您可能也会面临访问越界的风险。

您正在增加numInputFiles,因为这个j将始终是
for( j = 0; j < numInputFiles; j++ )
{
    FILE *file = fopen(inputFiles[j], "r");
这里也有几件事情可能出错:

  • 你在歌曲阵列上出界了。我的价值变得越来越大
  • 艺术家、标题或相册字符串没有足够的空间容纳您试图读入的字符串

  • ... 使用调试器,单步执行代码,查看它在哪一行识别故障。这应该给你一个强烈的提示。
    播放列表是什么?如何申报?它是如何传递给您的函数的?与
    inputFiles
    相同,它是什么,如何声明和初始化?