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

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

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

Доброго времени! Требуется ввести размер массива с клав-ры, заполнить массив - изменить его размер (вдвое меньше - значит половина элементов должна сохранить прежнее значение).
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. void cal(int);
  5. int main()
  6. {
  7. int siz;
  8. srand(time(NULL));
  9. printf("Enter array-size -> ");
  10. scanf("%d", &siz);
  11. cal(siz);
  12. return 0;
  13. }
  14. void cal(int siz)
  15. {
  16. int *ar=calloc(siz, sizeof(int));
  17. int j;
  18. printf("\narray -> ");
  19. for(j=0; j<siz; j++)
  20. printf("%d ", ar[j]=rand()%50);
  21. siz/=2;
  22. ar=realloc(ar, siz);
  23. printf("\n1/2 array -> ");
  24. for(j=0; j<siz; j++)
  25. printf("%d ", ar[j]);
  26. putchar('\n');
  27. return;
  28. }
Проблема в том, что старое значение хранят в себе только первые 2-3 элемента, независимо от размера массива.

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

textual
Листинг программы
  1. int size;
  2. int arr = NULL, arr_tmp = NULL;
  3. // получаем size
  4. arr = malloc(size * sizeof(*arr));
  5. // меняем size
  6. arr_tmp = realloc(arr, size * sizeof(*arr));
  7. if (NULL != arr_tmp) {
  8.     arr = arr_tmp;
  9.     arr_tmp = NULL;
  10. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы