Как выделить память под массив внутри функции
В инте объявляю сам массив
int main() {
int mas, n;
input(mas, &n);
free(mas);
}
Но собственно так как он без указания размера, это не правильно. В функции надо выделить под него память, в зависимости от введенного n.
void input(int *a, int *n) {
char temp;
if ((scanf("%d%c", n, &temp) == 1) || (temp == '\n')) {
a = (int*)malloc((*n) * sizeof(int));
Как это сделать правильно? Чтобы массив вернулся в инт.
Ответы (1 шт):
Вообще-то в int массив никак не вернуть, потому что массив — это по сути указатель на первый элемент, а размеры int и указателя могут и не совпадать.
Далее, при передаче аргумента в функцию по значению создается копия, так что даже если бы ваш input работал, переданная переменная-указатель не изменялась бы. Странно, что при этом n вы передаете правильно...
И — по мелочи — если у вас в самом деле С, то в = (int*)malloc приведение (int*) не нужно.
Можно так:
int* input(int *n)
{
if (scanf("%d", n) == 1)
{
return malloc((*n) * sizeof(int));
}
else return NULL;
}
int main() {
int *mas, n;
mas = input(&n);
free(mas);
}