int *arr;
int i, num;
printf("Enter number of elements: ");
scanf("%d", &num); //Assume num>=0
arr = calloc(num, sizeof(int));
if (arr == NULL)
return;
i = num;
以下哪个/哪些代码块会在调用 free() 时抛出异常,为什么?
for (i; i > 0; i--) {
arr[num - i] = i;
}
free(arr);
或
while (i--) {
arr[num - i] = i;
}
free(arr);
最佳答案
你的第二个循环
while (i--)
{
arr[num - i] = i;
printf("i = %d, num - i = %d, arr = %d\t", i, num - i, arr[num - i]);
}
由于 i 的后递减导致问题
您从 i == 10 开始,所以第一个赋值是 arr[10 - 9] = 9;
当 i 到达 1 时,这是你得到的最后一个循环 arr[10 - 0] = 0
并导致赋值写入数组范围 0..9 之外
如果你像这样写 while 循环它应该可以工作
do
{
arr[num - i] = i;
printf("i = %d, num - i = %d, arr = %d\t", i, num - i, arr[num - i]);
}
while (--i);