我有这些结构:
typedef struct Nodo{
int id_nodo;
struct Nodo *next;
} Nodo;
typedef struct{
Nodo *head;
} inmap;
//Struct Grafo
typedef struct {
int N; // numero dei nodi del grafo
int *out; // array con il numero di archi uscenti da ogni nodo
inmap *in; // array con gli insiemi di archi entranti in ogni nodo
} grafo;
我有一个图表,其中包含一个指向 inmap 元素数组(它们是链表的头)的指针。
我制作的释放函数是这个:
// Funzione per deallocare tutti i nodi della lista
void dealloca_lista(inmap *lista) {
// Ppuntatore ausiliario per scorrere la lista
Nodo *corrente = lista->head;
// Ciclo per scorrere ogni nodo della lista
while (corrente != NULL) {
// Salvo il puntatore al prossimo nodo
Nodo *prossimo = corrente->next;
// Dealloco la memoria occupata dal nodo corrente
free(corrente);
// Aggiorno il puntatore al nodo corrente con il prossimo
corrente = prossimo;
}
// Imposto l'head della lista a NULL
lista->head = NULL;
}
它可以工作,但通过这种方式,我释放了每个列表的所有节点,inmap 结构仍然被分配(对于数组 g.in 的每个位置)。
以下函数用于创建每个节点:
inmap crea_lista() {
inmap *nuova_lista = (inmap*)malloc(sizeof(inmap));
if (nuova_lista != NULL) {
nuova_lista->head = NULL;
}
return *nuova_lista;
}
我尝试在 for 循环中使用
free(&g.in[i])
释放数组中的所有 inmap 结构,但出现分段错误。
g.in
是结构体数组,而不是指针数组,因此不需要释放元素。
由于
crea_lista()
按值返回列表,因此不需要使用 malloc()
,然后你不需要释放任何东西。
inmap crea_lista() {
inmap nuova_lista = {NULL};
return nuova_lista;
}