Как выделить память под массив внутри функции

В инте объявляю сам массив

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 шт):

Автор решения: Harry

Вообще-то в 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);
}
→ Ссылка