我正在从以前的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;
我做错了什么?
答案 0 :(得分:2)
您正在尝试释放未动态分配的结构成员。
free (lista->prod);