从自引用对象C ++的二进制文件在内存中创建链接列表

时间:2011-03-27 21:27:56

标签: c++ linked-list

我正在尝试从文件中读取后填充链表。它只是在我运行时挂起。我知道这个问题与课程的分配有关(我可能错了)。 任何指导都将非常感谢。

Course course;//this one to read from file
Course* fileCourse = new Course();//this populates linked list
fstream Read("Courses.dat", ios::in | ios::binary);
if(!Read)
    cout << "Error Reading from file Courses.dat\n" << endl;
else
{
    Read.read(reinterpret_cast<char*>(&course), sizeof(Course));
    fileCourse->setNextCourse(&course);//problem here perhaps?
    while(Read && !Read.eof())
    {
        Read.read(reinterpret_cast<char*>(&course), sizeof(Course));
        fileCourse->setNextCourse(&course);
        if(head == NULL)
        {
            head = fileCourse;
        }
        else
        {
            Course* tmp = head;

            tmp = tmp->getNextCourse();

            while(tmp->getNextCourse() != NULL)
            {
                tmp = tmp->getNextCourse();
            }
            tmp->setNextCourse(fileCourse);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

  1. 这是家庭作业吗?如果是这样,请将其标记为。
  2. 要使用n项(在本例中为Course个对象)填充链接列表,您应该知道n个对象应该使用new Course()进行分配。您在此代码中分配了多少个对象?

答案 1 :(得分:0)

如果课程不是POD(普通旧数据),它有嵌入的成员函数,指针等,你可能无法为文件写入字节,然后将其读入并期望有效宾语。您需要在保存时序列化数据,然后在加载时将其反序列化为有效对象。这有时通过重载流操作符&lt;&lt;和&gt;&gt;将类输出/输入到文件。序列化的常见数据格式包括XML或JSON,甚至只是没有任何指针的二进制数据。

您遇到的错误可能类似于此问题中报告的内容:C++ Reading Objects from File Error