双重免费或腐败(快速停止)

时间:2016-04-20 21:24:33

标签: c struct free

我正在从以前的mallocs清除内存,我收到了这个错误: “./prot”错误:双重免费或损坏(快速登录) 。我为某些结构分配了内存,我在尝试释放它时遇到了这个错误。 这是我使用的结构:

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树)。这就是我对这个结构的启示:

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 个答案:

答案 0 :(得分:2)

您正在尝试释放未动态分配的结构成员。

free (lista->prod);