我遇到了一个无法解决的问题,当我试图读取之前已关闭但我重新打开的文件时,我一旦使用该对象就会出现分段错误( 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");
}
谢谢:)
答案 0 :(得分:3)
您应该对文件进行实际的序列化/反序列化。 &#34;构建&#34;通过从文件复制字节的对象(包含其中的函数)无效。
它可以用于POD(仅限数据)对象,而无需在其他地方引用内存(无指针),但对于其他内容,写入/读取原始字节不起作用 - 例如,内存地址将会重新加载对象时会出错。