Запись и восстановление дерева
У меня есть дерево состоящее из 4-х уровней, корень и первый уровень(продавец) записывает и считывает нормально, а вот третий и 4-й уровень не правильно. Третий уровень - продукт, а четвертый - реализация. Доступ к элементы 3-го уровня хранит указатель на массив указателей во-втором уровне, а доступ к 4-му уровню хранит указатель в 3 уровне. Элементы 4-го уровня реализованы в виде односвязного списка. Структуры 3-го и 4-го уровня:
```
struct Product{
char *name;
int warranty;
int sending;
Realiz *firstRealiz;
Seller *parent;
};
```
struct Realiz{
char *name;
string implementation;
int number;
double earnings;
Realiz *nextRealiz;
Product *parent;
};
```
```
Мои функции записи и восстановления дерева с файла:
```
void storeTree(FILE *f){
fwrite(root, sizeof(NTrade),1, f);
Seller *sAr = root->sellerArray;
for(int i = 0; i < root->sellerCount; i++){
fwrite(&sAr[i], sizeof(Seller),1, f);
Product* *pAr = sAr[i].pProductArray;
for(int j = 0; j < sAr[i].productCount; j++){
fwrite(pAr[j], sizeof(Product), 1, f);
int len = strlen((pAr[j])->name)+1;
fwrite(&len, sizeof(int), 1, f);
fwrite((pAr[j]->name), sizeof(char),len, f);
Realiz *pR = pAr[j]->firstRealiz;
while(pR != NULL){
fwrite(pR, sizeof(Realiz), 1, f);
len = strlen(pR->name)+1;
fwrite(&len, sizeof(int), 1, f);
fwrite(pR->name, sizeof(char),len, f);
len = strlen(pR->implementation.c_str())+1;
fwrite(&len, sizeof(int), 1, f);
fwrite(pR->implementation.c_str(), sizeof(char),len, f);
pR = pR->nextRealiz;
}
}
}
fclose(f);
}
void restoreTree(FILE *f){
if(root != NULL)
delTree(NULL);
root = new NTrade();
fread(root, sizeof(NTrade),1, f);
root->sellerArray = new Seller[root->arCapacity];
for(int i = 0; i < root->sellerCount; i++){
fread(&root->sellerArray[i], sizeof(Seller), 1, f);
Seller *se = &root->sellerArray[i];
se->parent = root;
se->pProductArray = new Product*[se->arCapacity];
for(int j = 0; j < se->productCount; j++){
Product *pr = new Product();
fread(pr, sizeof(Product), 1, f);
pr->parent = se;
se->pProductArray[j] = pr;
int len;
fread(&len, sizeof(int), 1, f);
char *fName = new char[len];
fread(fName, sizeof(char), len,f);
cout << fName;
pause();
pr->name = fName;
if(pr->firstRealiz != NULL){
Realiz *rl = new Realiz();
fread(rl, sizeof(Realiz), 1, f);
rl->parent = pr;
pr->firstRealiz = rl;
fread(&len, sizeof(int), 1, f);
char *rName = new char[len];
fread(rName, sizeof(char), len,f);
rl->name = rName;
fread(&len, sizeof(int), 1, f);
char *rIm = new char[len];
fread(rIm, sizeof(char), len,f);
rl->implementation = rIm;
while(rl->nextRealiz != NULL){
Realiz *rlnxt = new Realiz();
fread(rlnxt, sizeof(Realiz), 1, f);
rl->parent = pr;
rl->nextRealiz = rlnxt;
rl = rlnxt;
fread(&len, sizeof(int), 1, f);
char *rName = new char[len];
fread(rName, sizeof(char), len,f);
rl->name = rName;
}
}
}
}
fclose(f);
}
```
Могу предположить, что ошибка при записи или считывании поля name, поскольку там тип char*