我有一個鏈表的結構,我想傳遞一個節點(另一個結構)指針指向一個函數(該節點是鏈表的一部分,但我將節點單獨傳遞給刪除器函數從堆棧內存中刪除結構
我希望它複製下一個節點數據到自身(覆蓋其數據),並刪除下一個節點,從而刪除自己(這部分工作)..我做了它檢查是否傳遞的節點是(我知道我可以使用malloc()和free()使用堆內存)。我不知道如何從堆棧中刪除結構(我知道我可以malloc()和free()它使用堆內存)。
#include <stdlib.h>
#include <stdio.h>
typedef struct {
int data;
struct node * next;
}node;
typedef struct {
struct node * head;
}linked_list;
void print_list(linked_list * list) {
node *current = list->head;
while (current) {
printf("Current node has %d\n",current->data);
current = current->next;
}
}
void delete_node(node * n) {
node * next = n->next;
if (next) {
n->data = next->data;
n->next = next->next;
}
else {
*n = NULL; /*This of course won't compile because assigning void* (null) to node variable
but if i make n point to NULL, nothing will happen because i'm inside a function
and the pointer is duplicated (the passed pointer will still work) */
}
}
void main(){
node first;
node second;
first.data = 1;
first.next = &second;
second.data = 2;
second.next = NULL;
linked_list l;
l.head = &first;
print_list(&l);
delete_node(&second);
print_list(&l);
}
局部變量不會被刪除......您只需終止本地塊即可釋放該內存。 – mah
但我傳遞一個函數的指針,我想刪除的變量不在該函數的範圍內。這是否意味着我根本無法做我想做的事情? – user2263786
您可以從列表中取消鏈接,但不能刪除結構佔用的內存。您只能刪除首次分配的內容,並且通常以相同的方式刪除。由於您的分配是隱式的(通過啓動執行塊),您的釋放也將是隱式的(通過終止執行塊)。 – mah