我想從名爲deck的鏈表中移除一個'card'(節點)並將其移動到玩家的手上。總的來說,這是一個玩家將要拿出一張牌的地方,這張牌會被加到他們的手牌上並從牌組中完全刪除。我查看了Linked Lists: Moving a node from one linked list to the next並試圖遵循這種格式以及我的交易卡功能的修改格式。不幸的是,我的功能是不輸出任何東西。我在很多不同的時間修改了這個函數,但我認爲問題在於將內存分配給手中的新空間。我也試過手和甲板上的指針指針,因爲它解決了我代碼中的許多其他問題,但是我的方法似乎沒有什麼區別。這是我最近的嘗試。無論何時我編輯它,這絕對是我更復雜的嘗試之一,我似乎添加了更多的代碼行。如何將節點從一個鏈表添加到另一個節點
void drawCard (card* hand, card* deck) {
card* newCard = NULL;
newCard = (card*)malloc(sizeof(card*));
deck = deck->listp;
newCard = hand;
while (hand != NULL) {
hand = hand->listp;
}
newCard->face = deck->face;
newCard->suit = deck->suit;
hand = newCard->listp;
}
我的想法而寫,這是我在甲板上移動到列表中的下一個位置(第一個位置是「頂牌」,在播放),這將是卡進行繪圖。然後,我將newCard設置爲等於手的第一個位置,然後將手移動到列表的最後。我認爲這會在球員手上打開一個位置,但我似乎錯了。另外,我意識到我沒有添加一節從甲板上刪除節點。我是否會創建一個臨時變量,將卡節點複製到temp中,然後從卡組中釋放它?任何指導將非常感激。
您對'malloc'的調用使用了錯誤的大小。你需要'sizeof(card)',而不是'sizeof(card *)'。這是等待發生的分段故障。 –
'newCard =(card *)malloc(sizeof(card *));'then'newCard = hand;'會導致嚴重的內存泄漏。你正在爲'NewCard'分配一個內存,然後丟失它的蹤跡。 – alvits
謝謝@TomKarzes!我完全錯過了那個額外的星號。 –