Как уменьшить размер динамического массива через realloc? - C (СИ)
Формулировка задачи:
Есть такой вариант, но он почему-то не работает.
void remLastElement(int *array, int size) { int *newArray = (int* )realloc(array, (size - 1) * sizeof(int)); if ( newArray != NULL ) { array = newArray; } else { printf("No memory...\n"); return; } }
Решение задачи: «Как уменьшить размер динамического массива через realloc?»
textual
Листинг программы
void add_new_element( ptrdiff_t **array, ptrdiff_t *size ) { *array = (ptrdiff_t *)realloc( *array, ((*size)+1) * sizeof(ptrdiff_t)); if ( !(*array) ) printf("No memory...\n"); } add_new_element(&array,&size_of_array);
Объяснение кода листинга программы
- В функции add_new_element первый аргумент — это указатель на массив, который нужно увеличить.
- Второй аргумент — это указатель на переменную, в которой хранится размер массива.
- Внутри функции происходит выделение новой памяти с помощью realloc.
- Формула ((size)+1) sizeof(ptrdiff_t) используется для вычисления нового размера массива в байтах.
- Если realloc вернул NULL, то есть возникла ошибка при выделении памяти, то выводится сообщение об ошибке
No memory...\n
. - После успешного выделения памяти, старый массив освобождается с помощью free.
- Код вызывает функцию add_new_element, передавая в нее указатель на массив и указатель на переменную size_of_array.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д