Динамически создать массив и вернуть его из функции - 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.