У меня возникла проблема, когда я пытаюсь прочитать char* professeur
в двоичном файле, который он терпит неудачу, что дает мне ошибку сегментации в функции read()
. Что странно, так это то, что для всех остальных функций load
в других классах для чтения char*
члены работают нормально, но для этого, даже если professeur
написан правильно, у меня есть ошибка seg.C++ - бинарный файл с ошибками сегментации
Так вот код:
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&);
};
Cours.cpp
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);
}
Что делает 'соиЬ << "п:" << п << Endl;' сказать? Вы читаете мимо буфера? –
n дает длину файла профессора в файле, и он дает его правильно.Нет, длина теста, который я использовал, была 14, поэтому нет совсем нет. –
Вы пробовали отладку? – Koshinae