【发布时间】:2021-12-10 08:32:52
【问题描述】:
我正在尝试用 C 解决以下练习:
"考虑一个函数 dobuleArray(),它接受输入一个数组和一个 指向其大小的指针,并将数组加倍作为输出。创建一个 大小为 1 到 4 的数组作为初始大小。然后,开始填充数组 2048 个随机生成的整数;每次数组满时,调用 doubleArray() 函数。每次调用后 doubleArray() , 再次打印数组的内容”
我遇到了初始大小为 3 的问题。我编写的程序不适用于大于 4 的数字,我也不知道为什么。准确地说,我得到了一个realloc: invalid next size
int* doubleArray(int* vect, int* dim) {
int old_dim = *dim;
int i;
int new_dim = old_dim * 2;
vect = realloc(vect, new_dim * sizeof(int));
for (i = old_dim; i < new_dim; i++) {
vect[i] = 0;
}
*dim = new_dim;
return vect;
}
int main() {
int n = 3;
int* size = &n;
int* arr = malloc(n * sizeof(int));
for (int i = 0; i < 2048; i++) {
if (i > *size) {
int j = 0; // used to count the size of the doubled-array each time the
// if condition is true
arr = doubleArray(arr, size);
for (int i = 0; i < *size; i++) {
j++;
printf("%d ", arr[i]);
}
printf("\n");
printf("%d\n", j);
printf("\n");
arr[i] = rand() % 6;
} else {
arr[i] = rand() % 6;
}
}
}
我认为,双重功能应该可以正常工作。整个程序实际上只适用于2048 % value == 0 这样的值。但我想应该有一种方法可以纠正它以使其适用于 3。
明确地说,这个程序的输出看起来像:
1 4 3 0 0 0
6
realloc(): invalid next size
signal: aborted (core dumped)
【问题讨论】: