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);
}
我试图在 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);
}