纸牌游戏c,洗牌链表



我试图洗牌c中的链表。我的想法是将列表移动到一个纸牌数组中,然后对数组进行洗牌,然后将其全部放回链表中。当我做一切都很好,但当我使用调试器程序停止,并说"触发了一个断点",我没有任何不同。谢谢你的帮助!

这是我的一些代码

typedef struct card
{
  int rank;
  int suit;
}card;
void shuffleDeckPlay(cardList *deck1, int size)
{
card *array = (card*)malloc(sizeof(card));

for (int i = 0; i < size ; i++)
{
    array[i] = deck1->front->data;
    array = realloc(array, sizeof(card));
    Dequeue(deck1);
}

int i, j;
card temp;
    for (i = 0; i < size; i++)
    {
        j = rand() % size;
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    for (int i = 0; i < size; i++)
    {
        Enqueue(array[i], deck1);
    }
}

array只够存储一张卡片。即使在realloc之后,也只是将其realloc为1的大小。语法上没有什么问题,但是在运行时array[i]将出界,调试器正在拾取它。最好的解决方案是立即分配正确的数字:

card * array = (card*)malloc(numCards*sizeof(card));

然而,如果你想在for循环中重新分配,那么你的for循环应该是这样的:

for (int i = 0; i < size; i++) {
    array = (card*)realloc(array, (i+1)*sizeof(card));
    array[i] = deck1->front->data;
    Dequeue(deck1);
}

相关内容

  • 没有找到相关文章

最新更新