代碼可以在這里找到https://pastebin.com/DuxzjSsr
我用 gcc -g 編譯并在 gdb 中運行,它說段錯誤發生在
while(current != NULL){
current = current->next
}
我不明白為什么,我從這個鏈接https://www.learn-c.org/en/Linked_lists復制了代碼來列印鏈接串列等,據我所知,代碼幾乎相同。
uj5u.com熱心網友回復:
在您的代碼中,您從未正確初始化next. 因此,該值可能是記憶體中剩余的“垃圾”資料。在這里,您創建一個clist變數,只設定的data屬性:
clist mylist;
mylist.data = "First string";
問題是您沒有這樣做mylist.next = NULL;,因此該位置發生的任何事情仍然存在,并且您的代碼將嘗試current在串列迭代中將該值分配給current = current->next. 這可能會導致段錯誤。您試圖訪問任意位置的記憶體,結果是未定義的行為。根據經驗,始終初始化指標或將它們的值賦給NULL。
uj5u.com熱心網友回復:
首先你初始化串列的頭部錯誤。除了資料成員之外,您還應該初始化下一個指標,使其不會指向某個垃圾值。當您的列印函式讀取該指標(或任何其他函式)時,它將崩潰。
將此添加到您的主要
mylist.next = NULL;
您的資料插入也有同樣的錯誤(第 34-35 行)
current->next = (clist *)malloc(sizeof(clist));
current->next->data = strtoadd;
這一行將完成資料插入的技巧
current->next->data->next = NULL;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/364730.html
