重新打开读取文件中的对象后分段错误
segmentation fault after reading object in file re-openned
我遇到了一个我无法解决的问题,当我尝试读取以前关闭但重新打开的文件时,我一使用对象就遇到了分段错误(newT
(我遇到了分段错误,但我读取n
没有问题,这是要读取的对象数量。奇怪的是,如果我正在阅读一个新文件,我没有问题,那么我做错了什么?
这是代码:
创建文件功能:
char* CreerHoraire(fstream& fichier, char* nomFichier)
{
if(fichier.is_open())
cout<<"Vous devez fermer le fichier en cours avant d'en créer un autre"<<endl;
else
{
saisieNomFichier(nomFichier);
fichier.open(nomFichier, fstream::in | fstream::out | fstream::binary);
if(fichier)
cout<<"Le fichier "<<nomFichier<<" a bien été ouvert"<<endl;
else//if file doesn't exist I create it (no problem here)
{
fichier.open(nomFichier, fstream::in | fstream::out | fstream::binary |fstream::trunc);
if(fichier)
cout<<"Le fichier "<<nomFichier<<" a bien été créé"<<endl;
else
cout<<"Le fichier "<<nomFichier<<" a rencontré un problème à sa création !"<<endl;
}
}
return nomFichier;
}
读取功能
template<typename T>
void ListeTriee<T>::load(ifstream& fichier)
{
if(fichier.fail())
throw InvalidException("Erreur ouverture fichier");
else
{
int n;
T newT;
fichier.read ((char *)&n, sizeof(int));
while(n)
{
fichier.read ((char*) &newT, sizeof(newT));
newT.Affiche();//seg fault
this->insere(newT);//quand on utilise newT après lu
n--;
}
}
if(!fichier) throw InvalidException("Erreur lecture fichier");
}
谢谢:)
你应该对文件的对象进行真正的序列化/反序列化。通过从文件中复制字节来"构造"对象(其中包含函数(是无效的。
它可以适用于 POD(仅数据(对象,而无需在其他地方(没有指针(引用内存,但对于其他内容,写入/读取原始字节不起作用 - 例如,当您重新加载对象时,内存地址将全部错误。
相关文章:
- 从对象C++中的文件读取内容时出现分段错误
- 尝试将对象插入空指针数组时出现分段错误
- 分段错误(内核转储) C++面向对象编程
- 在C++中,当指向删除和指向不同对象时,分段故障指针
- 当我尝试绘制 sf::Text 对象时,SFML 中的分段错误
- 尝试从另一个类对象获取值时出现分段错误
- 添加两个具有运算符重载的数组对象,从而导致分段错误
- 实例化对象时如何修复分段故障错误
- 多对象手写单链表中的分段错误
- 列表<对象*>迭代器中的分段错误
- 尝试从方法返回指向对象的指针时出现分段错误
- 对ifstream对象调用close时出现分段错误
- 多个对象的插入时出现分段错误
- 创建对象 c++ 时出现分段错误
- 为什么在通过引用传递对象时不断出现分段错误
- wxWidgets UI应用程序在C++中使用4个或多个wxBoxSizer对象时出现分段错误
- 当对象包含指针成员时,堆栈上的对象销毁出现分段错误
- 尝试将调用对象与另一个对象进行比较时出现分段错误
- 使用索引缓冲区对象时出现奇怪的分段错误
- 分段错误(核心转储) - 通过对象访问结构的成员时