Динамическое выделение памяти под массив - 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
будет содержать выделенную память под массив.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д