C 中数组释放内的链表

问题描述 投票:0回答:1

我有这些结构:

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 结构,但出现分段错误。

arrays c memory-management linked-list free
1个回答
0
投票

g.in
是结构体数组,而不是指针数组,因此不需要释放元素。

由于

crea_lista()
按值返回列表,因此不需要使用
malloc()
,然后你不需要释放任何东西。

inmap crea_lista() {
    inmap nuova_lista = {NULL};
    return nuova_lista;
}
© www.soinside.com 2019 - 2024. All rights reserved.