链接列表的总线错误(核心转储)?

Bus error (core dumped) with Linked Lists?

我正在编写一个程序,允许用户输入要读取的个人数据库的文件名;该程序然后创建一个 linked 状态对象列表和一个 linked 每个状态中的人员对象列表 link 来组织文件中的信息。

我知道 linked 列表部分有效,因为我能够直接在文件名中编码并打印出州列表和每个州的人员列表;但是,当我尝试允许用户将文件名作为命令键入时,出现了总线错误。当我 运行 gdb 中的代码时,它只告诉我:

Program received signal SIGBUS, Bus error.
0x280df0bd in std::operator>><char, std::char_traits<char> > ()
   from /usr/lib/libstdc++.so.5

我什至没有得到一个行号!任何帮助将不胜感激。这是我的代码的命令和读取部分:

List<State*>* read(char* filename) {
    string fname, lname, birthday, state;
    int ssn;
    List<State*>* state_list = new List<State*>();

    ifstream file(filename);
    if (file.fail()) {
        cerr << "Error reading file.\n";
        exit(1);
    }

    while (!file.eof()) {
        file >> birthday >> ssn >> fname >> lname >> state;
        Link<State*>* searchres = searchList(state, state_list);
        Person* p = new Person(fname, lname, ssn, birthday, state);
        if (searchres == NULL) // create new state
        {
            State* addedstate = state_list->addLink(new State(state))->data;
            addedstate->res_list.addLink(p);
        }

        else // add to pre-existing state
        {
            searchres->data->res_list.addLink(p);
        }
    }
    return state_list;
}

void main() {
    string cmd;
    cout << "Type your command in all lowercase letters.\n";
    cin >> cmd;
    if (cmd == "read") {
        char* filnm;
        cin >> filnm;
        List<State*>* state_ls = read(filnm);
        Link<Person*>* counter = state_ls->first->data->res_list.first;
        while (counter != NULL) {
            cout << counter->data->ssn << "\n";
            counter = counter->next;
        }
    }
}

马上,你遇到了问题:

char* filnm;
cin >> filnm;

指针未初始化,但您使用该指针读取信息。

要么使用 std::string,要么使用适当大小的字符数组。

要在打开文件时使用 std::string:

std::string filnm;
cin >> filnm;
read(filnm.c_str());

您的 read 函数也应该将参数更改为 const char* 而不是 char *。您没有更改传递的字符数组的内容,因此它应该是 const.

编辑:您实际上不需要使用 c_str(),因为 std::string 有一个采用 const char* 的构造函数。仍然,在 read() 函数中将参数更改为 const char *filename