我想从名为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!我完全错过了那个额外的星号。 –