Динамически создать массив и вернуть его из функции - C (СИ)

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

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

Здравствуйте! Возникла проблема с динамическими массивами... Насколько я знаю, строчка
short* c = (short*)malloc(5*sizeof(short));
присваивает указателю ссылку на адрес первой ячейки массива, а сам массив хранится в общей куче, т.е. доступен ото всюду по данному адресу внутри программы. Но следующий код не работает:
void func(short * c, int * len) {
     *len = 5;
     c = (short*)malloc(5*sizeof(short));
}
При попытке обратиться по указателю к массиву после вызова данной функции выдает ошибку доступа... Как это правильно реализовать, если я заранее не знаю размер массива?
Да, вызываю так:
short * c;
int len;
func(c, &len);

Решение задачи: «Динамически создать массив и вернуть его из функции»

textual
Листинг программы
short * c;
int len;
func(&c, &len);
 
void func(short **c, int * len) {
     *len = 5;
     *c = malloc(5*sizeof(short));
}

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

  1. В коде объявлены две переменные: c типа short и len типа int.
  2. Затем вызывается функция func, которая принимает два аргумента: c и len.
  3. Внутри функции func значение переменной len присваивается 5.
  4. Далее, с помощью оператора malloc динамически выделяется память под массив коротких целых чисел (short) размером 5.
  5. Выделенная память присваивается переменной c.
  6. Функция func возвращает управление, и переменные c и len возвращаются в вызывающую функцию.
  7. Значение переменной len теперь равно 5, что является размером массива.
  8. Переменная c содержит адрес выделенной памяти.
  9. Поскольку массив коротких целых чисел имеет размер 5, то его элементы могут быть индексированы от 0 до 4.
  10. При желании использовать массив, его элементы могут быть доступны по индексам от 0 до 4 через переменную c.

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


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

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

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