0

所以,我的程序面临一个非常非常不寻常的问题。这是我的程序

    void insertItem (Song *&, Song *&, char ar [], int);
    void printList (Song *);
    void deleteList (Song *&, Song *&);
    void processList (Song *&);

    int main (int argc, char * argv[]) {    
    char * filename = argv[1]; char line [31];


int m, n, a;
------------


    /*
        Head and tail pointer to maintain a list of songs
    */
    Song *head;
    Song *tail;

    if (filename == NULL)
        exit(1);    

    fstream fio;
    fio.open (filename, ios::in);



**fio >> m; fio >> n;**
-----------------------


    // Reading the file
    while (!fio.eof()){


**fio >> a;**
-------------

        fio >> line;


**insertItem (head, tail, line, a);**
-------------------------------------

    }
    fio.close();

    printList (head);



**for (int b = 0; b < n; ++b) processList (head);**
---------------------------------------------------


    cout << "\nDeleting List";
    deleteList (head, tail);
    return 0;
    }

我声明了 3 个静态变量(m、n 和 a),并使用了这三个变量。我面临的问题是,一旦尝试在 for 循环中初始化变量b ,就会出现分段错误。我使用 gdb 对其进行了调试,当我尝试在 for 循环中使用变量b时,头指针的值发生了变化。相反,如果我使用以前使用过的变量,例如 m 或 a 而不是为 for 循环创建一个新变量,它运行得非常好。头指针的地址不会改变。关于这里可能发生什么的任何线索?

4

1 回答 1

0

您的代码中至少有两个错误:您从未初始化head并且tail(因此您对它们所做的任何事情都是未定义的行为),并且您在使用之前没有检查您的输入是否成功。(您的第一个循环可能应该是while ( fio >> line )。但您不想使用mor n,除非您已检查输入是否成功。)

于 2013-01-16T11:07:46.633 回答