Запись и восстановление дерева

У меня есть дерево состоящее из 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*


Ответы (0 шт):