char* professeur
をバイナリファイルで読み込もうとすると、問題が発生します。これは失敗し、read()
関数でセグメント化エラーが発生します。奇妙なのは他のクラスの他のクラスのload
関数を読み取ると、char*
のメンバーはうまく動作しますが、この場合はprofesseur
が正しく書かれていても、segフォルトが発生します。だからここC++ - セグメンテーションエラーバイナリファイルを読み込む
はコードです:Cours.cpp
Cours.h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
#include "Liste.h"
#include "Event.h"
#include "Professeur.h"
class Cours: public Event
{
private:
char* professeur;
Liste<int> groupes;
public:
void save(ofstream&) const;
void load(ifstream&);
};
void Cours::save(ofstream& o) const
{
int n=strlen(professeur);
char buff[60], *buff2;
o.write((char *)&n, sizeof(int));
strcpy(buff, getProfesseur());
o.write(buff, n+1);
groupes.save(o);
Event::save(o);
}
void Cours::load(ifstream& i)
{
int n;
char buff[60];
i.read((char *)&n, sizeof(int));
cout<<"n: "<<n<<endl;
if(i.read(buff, n+1))//seg fault
{
strcpy(professeur, buff);
cout<<"prof: "<<professeur<<endl;
}
else
cout<<"erreur read prof cours"<<endl;
groupes.load(i);
Event::load(i);
}
「cout <<」n:「<< n << endl;」とは何ですか?あなたはバッファを過ぎて読んでいますか? –
nはファイル内のprofesseurの長さを与え、正しく与えます。いいえテストの長さは私が使用した14だったので全くありません –
あなたはデバッグを試みましたか? – Koshinae