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