【发布时间】:2022-11-22 23:43:40
【问题描述】:
我刚刚开始学习malloc() 和realloc(),在测试它们时,我遇到了重新分配 int 数组大小的问题。
该程序应该创建一个数组,最初大小为 2,但它应该增加其大小并将值增加十倍。但是它并没有增加它的大小,输出最终是array = {0,1},而它应该是array = {0,1,2,3,4,5,6,7,8,9}
#include <stdlib.h>
#include <stdio.h>
int main(void) {
int *array= malloc(sizeof(int)*2);
for (int x = 0; x < 10; x++) {
array = realloc(array, sizeof(int)*(2+x));
array[x] = x;
}
for (int i = 0; i<(sizeof(array)/sizeof(array[0])); i++) {
printf("%d\n",array[i]);
}
printf("array size: %ld\n",sizeof(array)/sizeof(array[0]));
free(array);
}
有人可以解释为什么它不起作用吗?我试过寻找答案,但这些对我来说都没有意义哈哈。
【问题讨论】:
-
(sizeof(array)/sizeof(array[0])不能使用指针。 -
无论指向多少内存,
sizeof(pointer)始终相同。该信息未内置,您需要手动跟踪内存大小。 -
因为
array是一个指针,sizeof(array)是sizeof(int *)在 32 位机器上是 4 个字节,在 64 位机器上是 8 个字节。对于大多数 [现代] 机器,sizeof(int)是 4 [但可能是 2 甚至 8],所以我们最终根据体系结构将一个固定数除以一个固定数。因此,我们可以将:1、2、4、8 作为值。但是,从来没有像 1000 这样的东西。 -
存储数组中元素数量的计数,并在分配更多空间时调整该计数。不要忘记检查内存分配是否有效。
标签: c for-loop malloc dynamic-memory-allocation realloc