(*a).contents = newContents;
назначает адрес (первый элемент) локального массива newContents
на (*a).contents
. Как только ArrayList
возвращается, newContents
перестает существовать в модели вычислений C.
Правильный способ увеличить массив - это использовать realloc
для запроса большего выделения. Во-первых, запросите дополнительную память:
int *NewContents = realloc(a->contents, NumberOfElementsDesired * sizeof *NewContents);
Затем проверьте, успешно ли выполнен запрос:
if (NewContents == NULL)
{
fprintf(stderr, "Error, failed to allocate memory.\n");
exit(EXIT_FAILURE);
}
Затем запишите адрес новой памяти:
a->contents = NewContents;
После этого заполните новые элементы.