我正在尝试从文件中读取后填充链表。它只是在我运行时挂起。我知道这个问题与课程的分配有关(我可能错了)。 任何指导都将非常感谢。
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);
}
}
}
答案 0 :(得分:2)
n
项(在本例中为Course
个对象)填充链接列表,您应该知道n
个对象应该使用new Course()
进行分配。您在此代码中分配了多少个对象?答案 1 :(得分:0)
如果课程不是POD(普通旧数据),它有嵌入的成员函数,指针等,你可能无法为文件写入字节,然后将其读入并期望有效宾语。您需要在保存时序列化数据,然后在加载时将其反序列化为有效对象。这有时通过重载流操作符&lt;&lt;和&gt;&gt;将类输出/输入到文件。序列化的常见数据格式包括XML或JSON,甚至只是没有任何指针的二进制数据。
您遇到的错误可能类似于此问题中报告的内容:C++ Reading Objects from File Error