我正在从以前的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);