Как уменьшить размер динамического массива через 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);

Объяснение кода листинга программы

  1. В функции add_new_element первый аргумент — это указатель на массив, который нужно увеличить.
  2. Второй аргумент — это указатель на переменную, в которой хранится размер массива.
  3. Внутри функции происходит выделение новой памяти с помощью realloc.
  4. Формула ((size)+1) sizeof(ptrdiff_t) используется для вычисления нового размера массива в байтах.
  5. Если realloc вернул NULL, то есть возникла ошибка при выделении памяти, то выводится сообщение об ошибке No memory...\n.
  6. После успешного выделения памяти, старый массив освобождается с помощью free.
  7. Код вызывает функцию add_new_element, передавая в нее указатель на массив и указатель на переменную size_of_array.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы