Я пытаюсь реализовать динамически увеличивающийся массив с realloc
. Я создаю массив с malloc
, а затем вызвать мою add
функцию, которая увеличивает размер массива на 1. Вот код:ошибка realloc - приращение последнего элемента массива
#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
Как вы можете видеть, значение 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
Является ли это ошибка или я использую realloc
неправильно?
Вам не нужно бросать результат malloc. вы можете изменить 'foo = (int *) malloc (количество * sizeof (int));' to 'foo = malloc (количество * sizeof * foo);' – sjsam
[Ошибка компилятора] (http://c2.com/cgi/wiki? CompilerBug) –