提问人:altair00 提问时间:7/15/2022 更新时间:7/15/2022 访问量:553
使用“realloc”调整现有数组的大小
resizing an existing array using `realloc`
问:
我定义了一个数组,我尝试使用调整大小,但它不起作用。我的问题是我可以使用还是必须使用或首先定义数组然后使用?realloc()
arr[]
calloc()
malloc()
realloc()
这是我到目前为止的工作......
#include <stdio.h>
#include <stdlib.h>
void printArray (int *arr, int size) {
printf("{");
for (int i=0; i<size; i++) {
if (i == size-1) {
printf("%d", arr[i]);
} else {
printf("%d, ", arr[i]);
}
}
printf("}\n");
}
int main () {
int arr[] = {1, 2, 3};
int size = sizeof(arr)/sizeof(arr[0]);
printArray(arr, size);
////////////////////////////////////////
int newSize = size++;
arr = realloc(arr, newSize*sizeof(int));
printArray(arr, newSize);
return 0;
}
答:
0赞
Vlad from Moscow
7/15/2022
#1
对于初学者来说,你的意思似乎是
int newSize = ++size;
而不是
int newSize = size++;
正如克雷格·埃斯蒂(Craig Estey)在其评论中指出的那样。
此数组
int arr[] = {1, 2, 3};
具有自动存储期限。
您可以重新分配已分配存储持续时间的数组,该数组是使用函数 malloc、calloc 或 realloc 分配的数组。
请注意,如果阵列分配了存储持续时间,则在调用 realloc 之后arr
int newSize = ++size; // not size++
arr = realloc(arr, newSize*sizeof(int));
数组的最后一个元素具有不确定的值,因为它未初始化。
评论
1赞
Craig Estey
7/15/2022
int newSize = size++;
--> int newSize = ++size;
还是[更好]?int newSize = size + 1;
0赞
Vlad from Moscow
7/15/2022
@CraigEstey谢谢。一句傻话。我很细心:)
评论
realloc
只能用于调整由 、 和类似函数分配的内容的大小。此外,如果增加分配对象的大小,则从旧大小到新大小的额外部分将被垃圾填满,因此打印其内容将打印垃圾。malloc
calloc
realloc
realloc
malloc
calloc
realloc
realloc