У меня есть простой код:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int elms = 5;
int* a = (int*) calloc(elms, sizeof(int));
*a = elms;
for(int i = 1; i < elms; i++){
*(a + i) = i;
}
for(int i = 0; i < elms; i++){
printf("%d ", *(a + i));
}
printf("\n");
free(a);
// create new array with size increased by one
int* arr = (int*) realloc(a, (elms + 1) * sizeof(int));
*(arr + elms) = 10;
for(int i = 0; i < elms + 1; i++){
printf("%d ", *(arr + i));
}
printf("\n");
return 0;
}
запустить на rextester
Здесь я получаю вывод как:
5 1 2 3 4
0 0 2 3 4 10
Myвопрос в том, почему при вызове free()
удаляются только первые два элемента массива?Либо он должен был удалить только первый элемент, либо все элементы, но почему два элемента?
Если я прокомментирую вызов free()
, я получу ожидаемый результат:
5 1 2 3 4
5 1 2 3 4 10
Примечание: выход не изменится, если я переназначу значение realloc
обратно на a
, как и ожидалось.