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