Динамически создать массив и вернуть его из функции - 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)); }
Объяснение кода листинга программы
- В коде объявлены две переменные:
c
типаshort
иlen
типаint
. - Затем вызывается функция
func
, которая принимает два аргумента:c
иlen
. - Внутри функции
func
значение переменнойlen
присваивается 5. - Далее, с помощью оператора
malloc
динамически выделяется память под массив коротких целых чисел (short) размером 5. - Выделенная память присваивается переменной
c
. - Функция
func
возвращает управление, и переменныеc
иlen
возвращаются в вызывающую функцию. - Значение переменной
len
теперь равно 5, что является размером массива. - Переменная
c
содержит адрес выделенной памяти. - Поскольку массив коротких целых чисел имеет размер 5, то его элементы могут быть индексированы от 0 до 4.
- При желании использовать массив, его элементы могут быть доступны по индексам от 0 до 4 через переменную
c
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д