2016-04-20 3 views
-2

я очищал память от предыдущих mallocs и я получил эту ошибку: Ошибка в `./prot ': двойной бесплатно или повреждение (fasttop). Я выделил память для некоторых структур, и я получил эту ошибку при попытке освободить их. Это те, которые я использовал Структуры:Double бесплатно или повреждение (faststop)

struct ProdutoN 
{ 
    char prod[MAXBUFFPROD]; 
    int altura; 
    struct ProdutoN *esq; 
    struct ProdutoN *dir; 
}; 


struct ArrayProd 
{ 
    ProdutoNP lista[26]; 
    int tamanho[26]; 
}; 

Я создал неполный тип, называемый CatalogoProdutos, что указует на структуру называется ArrayProd. Внутри той же структуры я создал неполный тип, называемый ProdutoNP, который указывает на структуру, называемую ProdutoN (которая является деревом avl). Это, как я iniciated этот Структуры:

void inicializa(CatalogoProdutos l) 
{ 
    int i; 
    l=(CatalogoProdutos)malloc(sizeof(struct ArrayProd)); 
    for(i=0;i<26;i++) 
    { 

     l->lista[i] = (ProdutoNP)malloc(sizeof(struct ProdutoN)); 
     l->lista[i] = NULL; 
     l->tamanho[i]=0; 

    } 

} 

Это, как я пытался освободить это:

void freePNP (ProdutoNP lista) 
{ 
    if (lista == NULL) 
    return; 

    free (lista->prod); 
    freePNP (lista->esq); 
    freePNP (lista->dir); 

    free(lista); 
} 
void freeCP (CatalogoProdutos l) 
{ 
    int i; 

    if (l == NULL) 
    return; 

    for (i = 0 ; i < 26 ; i++) 
    freePNP(l->lista[i]); 

    free(l); 
} 

Определения неполных типов:

typedef struct ProdutoN *ProdutoNP; 
typedef struct ArrayProd *CatalogoProdutos; 

То, что я делать не так?

+1

'l-> lista [i] = (ProdutoNP) malloc (sizeof (struct ProdutoN)); l-> lista [i] = NULL; 'что это означает? –

+2

Было бы полезно опубликовать определения «ProdutoNP» и «CatalogoProdutos». – tinman

+1

@SouravGhosh, я думаю, он просто хочет там протекать там :) – ddz

ответ

2

Вы пытаетесь освободить член структуры, который не распределяется динамически.

free (lista->prod); 
Смежные вопросы