1樓:匿名使用者
node* tmpnode = node->next->next;
free(node->next);//free了已經node->next = tmpnode;//在這你又繼續使用了node->next->pre = node;//在這 你也使用了 所以 會出錯
在使用鍊錶的時候 要判斷他是否存在 不為空 再用 也就是進行安全性檢測
2樓:做挨踢的
首先,你的malloc用錯了,malloc(sizeof(node*))表示申請乙個大小為4位元組的區域,應該用malloc(sizeof(node)),這樣才能正確申請一塊剛好用於儲存乙個node的記憶體區域。因為sizeof(node*)得出的是node*這種指標所占用的記憶體大小,32位系統裡是4位元組。sizeof(node)則返回node結構體占用的記憶體大小。
所以需要把malloc(sizeof(node*))都改為malloc(sizeof(node))
其次,node* node = (node*)malloc(sizeof(node*));
if (null == node)
node = creatnode();
這樣寫沒有必要,浪費了記憶體空間
應改為:
node* node = creatnode();
if (null == node)
c語言編寫雙向鍊錶刪除
3樓:_葉子妞妞
原始核心**是有一些問題的。
修改如下:
#include
#include
typedef struct dubnodenode,*dublink;
void creat(dublink *l,int n)}void print(dublink l)printf("\n");
}void insert(dublink *l,int i,int e)
if(!p||j>i)
printf("error");
else
}void de(dublink *l,int i)if(!p||j>i)
printf("error");
else
}int main()
關於c語言鍊錶的問題,關於C語言鍊錶的問題
slist是你定義的結構體的名稱,你寫的動態記憶體分配,意思是申請乙個指向slist的slist記憶體空間的指標,沒有這個名稱,就相當於乙個人沒了名字,幹什麼都不方便 slist就是nde的別名 因為你用到關鍵字typedef typedef是給型別取別名之意 如 typedef unsigned ...
c語言問題,急急急!關於鍊錶的,c語言問題,急急急!關於鍊錶的!
include include typedef struct listlist list createlist int n return head list a b list a,list b 計算a b,計算結果儲存在a中 else if pa next null pa是表尾else 非表頭元素和...
在C語言鍊錶中,p q next和p next q next有什麼區別
給你普及下指標的真諦 假設兩個鍊錶節點的記憶體位址分別為aaaa和bbbb,節點內偏移4位元組處儲存名為next的指標,p 0xaaaa,q 0xbbbb,這說明p和q分別指向這兩個節點。p next是記憶體aaae處的內容,q next是記憶體bbbf處的內容 假設為cccc 那麼,p q nex...