Динамическое выделение памяти под массив - C (СИ) (75349)
Формулировка задачи:
Доброго времени! Требуется ввести размер массива с клав-ры, заполнить массив - изменить его размер (вдвое меньше - значит половина элементов должна сохранить прежнее значение).
Проблема в том, что старое значение хранят в себе только первые 2-3 элемента, независимо от размера массива.
#include <stdio.h> #include <stdlib.h> #include <time.h> void cal(int); int main() { int siz; srand(time(NULL)); printf("Enter array-size -> "); scanf("%d", &siz); cal(siz); return 0; } void cal(int siz) { int *ar=calloc(siz, sizeof(int)); int j; printf("\narray -> "); for(j=0; j<siz; j++) printf("%d ", ar[j]=rand()%50); siz/=2; ar=realloc(ar, siz); printf("\n1/2 array -> "); for(j=0; j<siz; j++) printf("%d ", ar[j]); putchar('\n'); return; }
Решение задачи: «Динамическое выделение памяти под массив»
textual
Листинг программы
int size; int arr = NULL, arr_tmp = NULL; // получаем size arr = malloc(size * sizeof(*arr)); // меняем size arr_tmp = realloc(arr, size * sizeof(*arr)); if (NULL != arr_tmp) { arr = arr_tmp; arr_tmp = NULL; }
Объяснение кода листинга программы
- Объявлены две переменные:
size
иarr
. Значение переменнойsize
не определено, а переменнаяarr
инициализирована значением NULL. - Выделена динамическая память под массив с помощью функции malloc(). Размер памяти вычисляется как произведение
size
на размер одного элемента (предполагая, чтоsize
уже определено). - Значение переменной
arr
заменено на выделенную память. - Выделенная память освобождена с помощью функции realloc(). Значение переменной
arr_tmp
инициализировано результатом вызова функции realloc(). - Если переменная
arr_tmp
не равна NULL, то значение переменнойarr
заменено на значениеarr_tmp
. После чего переменнаяarr_tmp
инициализирована значением NULL. - В конце кода значение переменной
arr
будет содержать выделенную память под массив.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д