Gus*_*Gus -1 c memory-management realloc
我试图实现一个dinamically增加数组realloc.我创建数组malloc,然后调用我的add函数,这将数组大小增加1.这是代码:
#include <stdio.h>
#include <stdlib.h>
int *foo;
int quantity;
void add(int number) {
foo = (int*) realloc(foo, sizeof(foo) + sizeof(int));
foo[quantity] = number;
quantity++;
}
void debugFoo() {
for (int i = 0; i < quantity; i++) {
printf("foo[%i] = %i\n", i, foo[i]);
}
printf("\n");
}
int main() {
quantity = 3;
foo = (int*) malloc(quantity * sizeof(int));
foo[0] = 1;
foo[1] = 2;
foo[2] = 3;
debugFoo();
add(20);
debugFoo();
add(2);
debugFoo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我得到以下输出:
foo[0] = 1
foo[1] = 2
foo[2] = 3
foo[0] = 1
foo[1] = 2
foo[2] = 3
foo[3] = 20
foo[0] = 1
foo[1] = 2
foo[2] = 3
foo[3] = 21
foo[4] = 2
Run Code Online (Sandbox Code Playgroud)
如您所见,foo [3]的值在我第二次调用时递增1 add.奇怪的是,如果传递给的第一个值add是偶数,它只会递增.将第30行更改为add(21),我得到以下输出:
[...]
foo[2] = 3
foo[3] = 21
foo[0] = 1
foo[1] = 2
foo[2] = 3
foo[3] = 21
foo[4] = 2
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是我使用realloc错了?
sizeof(foo)不是分配缓冲区的大小,而是大小foo,即int*.使用保存的元素数来计算新的缓冲区大小.
foo = (int*) realloc(foo, sizeof(int) * (quantity + 1));
Run Code Online (Sandbox Code Playgroud)