Я пытаюсь заполнить динамически сгенерированный массив, используя для l oop и увеличить его при необходимости, используя reallo c (). Однако, когда reallo c вызывается в памяти несколько раз, он заменяет некоторые значения, особенно первое и последнее, на кажущиеся случайными числами.
Это код, с которым я проверял сказанное:
#include <stdio.h>
#include <stdlib.h>
void fill(int * array, int size, int number_of_values) {
for (int i = 0; i < number_of_values; i++) {
if (i == size) {
size *= 2;
array = realloc(array, sizeof(int) * size);
}
array[i] = 100;
}
}
int main() {
int *array;
int number_of_values = 21;
int size = 5;
array = malloc(sizeof(int) * size);
fill(array, size, number_of_values);
for (int i = 0; i < number_of_values; i++) {
printf("%i ", array[i]);
}
}
Я несколько раз пытался переопределить код и смотрел на массив сразу после присвоения ему 100
, но все значения сначала назначаются правильно, а потом меняются как-то. Я также заметил, что такое поведение, по-видимому, происходит, только когда в l oop назначено более 20 элементов.
Вывод программы обычно выглядит примерно так:
10425976 10436440 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 134217736
В то время как, когда я устанавливаю number_of_values
на 20 и, следовательно, присваиваю только 20 значений, вывод выглядит следующим образом:
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
Я также просмотрел некоторые ссылки на функцию realloc
, но, насколько мне известно, я использовал ее правильно.