Realloc - увеличение размера памяти в программировании
Описание функции realloc:
Функция realloc предназначена для изменения размера выделенной памяти. Она перераспределяет блок памяти, на который указывает переданный указатель, до указанного размера.
Синтаксис функции realloc:
<pre><code>void *realloc(void *ptr, size_t size);</code></pre>
Где:
ptr- указатель на блок памяти, который нужно изменитьsize- новый размер блока памяти в байтах
Функция realloc возвращает указатель на перераспределенную память. Если операция перераспределения памяти была успешной, то указатель на новый блок памяти будет различаться с переданным ptr. Если операция не выполнена из-за нехватки памяти, то возвращается NULL. Перед использованием возвращенного указателя необходимо проверить его на NULL.
Примеры использования realloc:
-
Размер блока памяти увеличивается:
<pre><code>#include <stdio.h> #include <stdlib.h> int main() { int *array = (int*)malloc(5 * sizeof(int)); if (array == NULL) { printf("Ошибка при выделении памяти.\n"); return 1; } // заполнение массива значениями for (int i = 0; i < 5; i++) { array[i] = i; } // увеличение размера массива до 10 элементов int *newArray = (int*)realloc(array, 10 * sizeof(int)); if (newArray == NULL) { printf("Ошибка при перераспределении памяти.\n"); free(array); return 1; } // продолжение работы с новым массивом for (int i = 5; i < 10; i++) { newArray[i] = i; } // печать значений массива for (int i = 0; i < 10; i++) { printf("%d ", newArray[i]); } free(newArray); return 0; } -
Размер блока памяти уменьшается:
<pre><code>#include <stdio.h> #include <stdlib.h> int main() { int *array = (int*)malloc(10 * sizeof(int)); if (array == NULL) { printf("Ошибка при выделении памяти.\n"); return 1; } // заполнение массива значениями for (int i = 0; i < 10; i++) { array[i] = i; } // уменьшение размера массива до 5 элементов int *newArray = (int*)realloc(array, 5 * sizeof(int)); if (newArray == NULL) { printf("Ошибка при перераспределении памяти.\n"); free(array); return 1; } // печать значений массива for (int i = 0; i < 5; i++) { printf("%d ", newArray[i]); } free(newArray); return 0; }
Важно отметить, что при использовании realloc необходимо быть внимательными, чтобы не потерять указатель на блок памяти и избежать утечек памяти. Также нужно учитывать, что realloc может выполниться более эффективно на некоторых платформах, чем последовательность функций malloc и memcpy. Однако в некоторых случаях realloc может быть медленнее или вызывать фрагментацию памяти. Поэтому следует использовать realloc тогда, когда это необходимо и оправдано.