我正在尝试从头开始制作 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 方法会执行一些操作,例如删除分配的元素。
是我的代码有问题还是什么问题??
预计会出现段错误或其他问题
您正在尝试打印已释放的元素。这会导致未定义的行为。尝试使用
-fsanitize=address
标志编译代码,您应该会看到类似 AddressSanitizer: heap-use-after-free
的内容