c中的纸牌游戏,洗牌链表

card game in c, shuffle linked list

我试图在 c 中打乱链表。 我的想法是将列表移动到卡片数组中,然后对数组进行洗牌,然后将其全部放回链表中。 当我构建时一切正常但是当 id 使用调试器时程序停止并说 "triggered a breakpoint" 而我没有做任何不同的事情。 感谢您的帮助!

这是我的一些代码

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 只够放一张卡片。即使在您重新分配之后,您也只是将其重新分配为一个大小。在语法上没有错,但是在运行时 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);
}