-
首先,你用錯了malloc,malloc(sizeof(node*))表示申請乙個4位元組的區域,你應該用malloc(sizeof(node)),這樣你就可以正確地申請乙個剛好用來儲存乙個節點的記憶體區域。 因為 sizeof(node*) 給出了 node* 指標使用的記憶體大小,在 32 位系統中為 4 個位元組。 sizeof(node) 返回節點結構占用的記憶體大小。
所以你需要把malloc(sizeof(node*))改成malloc(sizeof(node))。
其次,node* node = (node*)malloc(sizeof(node*))。
if (null == node)
printf("the node can't creat.");
exit(exit_failure);
node = creatnode();
沒有必要這樣寫,它會浪費記憶體空間。
應為:node* node = creatnode();
if (null == node)
printf("the node can't creat.");
exit(exit_failure);
-
node* tmpnode = node->next->next;
free(node->next);它是免費的。
node->next = tmpnode;在這裡,您繼續使用它。
node->next->pre = node;在這一點上,你也用過,它會出錯。
使用鍊表時,需要確定它是否存在,並且不為空,然後再次使用,即進行安全檢查。
-
其工作原理如下:
由於每個節點都包含指向後續節點的指標,因此在刪除該節點之前,必須保留指向後續節點的指標。 ptemp=p1->next->next;
刪除節點。 free(p1->next);注意:節點釋放後,p1->next 指向的記憶體區域無效,因此 p1->next 成為無效的空指標。
然後將上乙個節點視為當前節點。 將指向當前節點的後續節點的指標儲存。 p1->next=ptemp;鏈結後續節點。