c ++ - 在重新打开文件中读取对象后的分段错误

时间:2016-01-04 19:44:51

标签: c++ file

我遇到了一个无法解决的问题,当我试图读取之前已关闭但我重新打开的文件时,我一旦使用该对象就会出现分段错误( 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");
}

谢谢:)

1 个答案:

答案 0 :(得分:3)

您应该对文件进行实际的序列化/反序列化。 &#34;构建&#34;通过从文件复制字节的对象(包含其中的函数)无效。

它可以用于POD(仅限数据)对象,而无需在其他地方引用内存(无指针),但对于其他内容,写入/读取原始字节不起作用 - 例如,内存地址将会重新加载对象时会出错。