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

После записи/восстановления дерева из файла я запускаю функцию вывода дерева на консоль и у меня вылетает. До вылета видно, что на консоль выведен корень, один элемент второго уровня, два элемента третьего и элементы 4-го уровня, но только у одного элемента третьего. Проще говоря консоль вылетает когда идет попытка вывода элементов 4-го уровня второго элемента третьего. Не знаю в чем ошибка. Элементы 4-го уровня хранятся в виде односвязного списка.

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);
            Realiz *pR = pAr[j]->firstRealiz;
            while(pR != NULL){
                fwrite(pR, sizeof(Realiz), 1, f);
                pR = pR->nextRealiz;
            }
        }
    }
    fclose(f);
}

void restoreTree(FILE *f){
    if(root != NULL)
        delTree(root);
    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;
            if(pr->firstRealiz != NULL){
                Realiz *rl = new Realiz();
                fread(rl, sizeof(Realiz), 1,  f);
                rl->parent = pr;
                pr->firstRealiz = rl;
                while(rl->nextRealiz != NULL){
                    Realiz *rlnxt = new Realiz();
                    fread(rlnxt, sizeof(Realiz), 1, f);
                    rlnxt->parent = pr;
                    rl->nextRealiz = rlnxt;
                    rl = rl->nextRealiz;
                }
            }
        }
    }
    fclose(f);
}

введите сюда описание изображения


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