`free` 不会释放内存,为什么?

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

我正在尝试从头开始制作 LikedList 数据结构。 我做了结构

typedef struct ListNode {
    int item;
    struct ListNode* back; // point to the Node the before the current Node
    struct ListNode* next; // point to the next node
    struct ListNode* feet; // point to the last Node in the list
} ListNode;

将项目推入列表的功能。

void push_item(ListNode* list, int item) {
    list->feet->next = malloc(sizeof(ListNode));
    list->feet->next->back = list->feet;
    list->feet = list->feet->next;
    list->feet->item = item;
}

这里是必须弹出最后一个元素的函数。

void pop_item(ListNode* list) {
    ListNode* pre = list->feet->back;
    free(list->feet);
    printf("%i\n", list->feet->item); // prints 38 which is the value that i give to the last element with `push_item` function
    pre->next = nullptr;
    list->feet = pre;
}

正如您所看到的,它打印了

32
,这不是预期的。 我认为 free 方法会执行一些操作,例如删除分配的元素。 是我的代码有问题还是什么问题??

预计会出现段错误或其他问题

c data-structures memory-management linked-list
1个回答
0
投票

您正在尝试打印已释放的元素。这会导致未定义的行为。尝试使用

-fsanitize=address
标志编译代码,您应该会看到类似
AddressSanitizer: heap-use-after-free

的内容
© www.soinside.com 2019 - 2024. All rights reserved.