我正在嘗試使用realloc
實現dinamically增加的數組。我創建malloc
的數組,然後叫我add
功能,1。此處增加數組的大小是代碼:realloc bug - 增加數組的最後一個元素
#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;
}
然而,當我運行它,我得到以下的輸出:
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
正如您所看到的,第二次調用add
時,foo [3]的值會加1。而奇怪的是,只有當傳遞給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
這是一個bug,或我使用realloc
錯了嗎?
您不需要投射malloc結果。你可以改變'foo =(int *)malloc(quantity * sizeof(int));'to'foo = malloc(quantity * sizeof * foo);' – sjsam
[Compiler Bug](http://c2.com/cgi/wiki?CompilerBug) –