Динамическое выделение памяти под массив - C (СИ) (75349)

Узнай цену своей работы

Формулировка задачи:

Доброго времени! Требуется ввести размер массива с клав-ры, заполнить массив - изменить его размер (вдвое меньше - значит половина элементов должна сохранить прежнее значение).
#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;
    }
Проблема в том, что старое значение хранят в себе только первые 2-3 элемента, независимо от размера массива.

Решение задачи: «Динамическое выделение памяти под массив»

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;
}

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

  1. Объявлены две переменные: size и arr. Значение переменной size не определено, а переменная arr инициализирована значением NULL.
  2. Выделена динамическая память под массив с помощью функции malloc(). Размер памяти вычисляется как произведение size на размер одного элемента (предполагая, что size уже определено).
  3. Значение переменной arr заменено на выделенную память.
  4. Выделенная память освобождена с помощью функции realloc(). Значение переменной arr_tmp инициализировано результатом вызова функции realloc().
  5. Если переменная arr_tmp не равна NULL, то значение переменной arr заменено на значение arr_tmp. После чего переменная arr_tmp инициализирована значением NULL.
  6. В конце кода значение переменной arr будет содержать выделенную память под массив.

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


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

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

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