【发布时间】:2010-08-19 16:17:32
【问题描述】:
我正在尝试用 C++ 序列化一组结构。这适用于所有数据,除了我的结构中包含的向量。我可以将数据写入磁盘,然后将所有数据读回内存。唯一的问题是当我尝试访问向量的元素时出现分段错误。我的代码如下。非常感谢任何帮助。
写入磁盘的程序
int main {
struct Student one;
strcpy(one.FullName, "Ernestine Waller");
strcpy(one.CompleteAddress, "824 Larson Drv, Silver Spring, MD 20910");
one.Gender = 'F';
one.LivesInASingleParentHome = true;
one.grades.push_back(80);
one.grades.push_back(90);
ofstream ofs("fifthgrade.ros", ios::binary);
ofs.write((char *)&one, sizeof(one));
ofs.close();
}
从磁盘读取的程序
int main {
struct Student *two = (struct Student *) malloc(sizeof(struct Student));
ifstream ifs("fifthgrade.ros", ios::binary);
//cout << "Size of struct: " << size << endl;
ifs.read((char *)two, sizeof(struct Student));
cout << "Student Name: " << two->FullName << endl;
cout << "First Grade: " << two->grades[0] << endl;
cout << "Second Grade: " << two->grades[1] << endl;
ifs.close();
return 0;
}
【问题讨论】:
-
请附上
Student的声明 -
天哪!您正在混合 C 和 C++,
malloc以动态分配元素,同时在结构内将其与std::vector混合...您真的应该回到基础并从简单的 C++ 教程开始。实际上,您的程序很可能处于未定义行为领域...(提示:Student结构中的std::vector何时初始化?) -
天哪...您需要回顾一下序列化的概念以及 C 和 C++ 之间的区别。这个网站上有一些问题推荐阅读列表来学习C++,这对你有很大的好处。事实上,您的程序需要完全重写。