鍊錶的迴圈帶刪除操作

2021-06-22 15:48:49 字數 673 閱讀 3941

錯誤的乙個思路,往往導致乙個很難查詢的bug,上週在實現資料儲存鍊錶時,由於思路的不嚴謹,導致乙個bug查了大半天,**原先是這樣的

while(p)

}else

if(p->external_ip)

free(p->external_ip);

if(p->internal_ip)

free(p->internal_ip);

free(p);

break;

}p = p->next;

}額,好吧,在原先的專案中曾經有過這樣的**,後面修過了,這次又發生了,一塊石頭踢了兩次腳,很明顯,在搜尋到了的時候我這邊是呼叫了free(p),但僅接著又做了p = p->next,額,這個就有點難為情了,操作空指標了,好吧,這確實會導致乙個fatal signal 11的問題!

後面更正後的**

while(p)

}else

if(p->external_ip)

free(p->external_ip);

if(p->internal_ip)

free(p->internal_ip);

free(p);

break;

}else

p = p->next;

}告訴自己,在查詢的時候要是做delete的操作,切忌要注意使用野指標

雙向迴圈帶頭結點鍊錶的常見操作

include dlist.h include malloc.h include assert.h include pdlnode buydlist dldatatype data pnewnode pnext null 剛開始給節點並不知道位置所以給null pnewnode ppre null ...

雙向迴圈帶頭節點鍊錶

include include struct dblnode typedef struct dblnode dblnode typedef struct dblnode dbllink void create link dbllink head 建立鍊錶 void create newnode db...

雙向迴圈帶頭鍊錶的基礎操作 增刪改查

typedef int cldatatype 結點型別 typedef struct listnode listnode 鍊錶的頭 typedef struct list list 建立乙個雙向迴圈鍊錶結點 listnode buylistnode cldatatype x 初始化雙向迴圈帶頭鍊錶 ...