卡片游戏中的c,随机链接列表

时间:2015-05-30 15:28:02

标签: c linked-list shuffle realloc

我试图在c中随机播放一个链表。 我的想法是将列表移动到一个卡阵列中,然后将数组洗牌,然后将其全部放回链接列表中。 当我构建一切都很好但是当id使用调试器时程序停止并说“触发断点”并且我没有任何不同。 谢谢你的帮助!

这是我的一些代码

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);
    }
}

1 个答案:

答案 0 :(得分:1)

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);
}