我正在从以前的malloc中清除内存,但出现此错误:
./prot中的错误:双重释放或损坏(fasttop)。我为某些结构分配了内存,尝试释放它们时出现此错误。
这是我使用的结构:

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;


我做错了什么?

最佳答案

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

free (lista->prod);

09-06 04:07