В колледже от меня требовалось создать функцию на C, которая считывает ряд значений из файла, а затем динамически выделяет память массиву, передаваемому по ссылке с использованием указателей (он должен использовать указатели) ...

1
AlphaKode 11 Янв 2021 в 10:20

1 ответ

Лучший ответ

Внутри ваших функций a - это копия указателя на указатель.
Здесь вы назначили этой копии что-то еще:

a = calloc((*n),sizeof(int));

Это не имеет никакого эффекта вне функции.

Вне ваших функций a является указателем на int, имеет смысл написать там указатель на int.
Вы можете сделать это (через копию, используемую в ваших функциях), например, например

*a = calloc((*n),sizeof(int));

Для этого эффекта вне ваших функций вы должны вызывать с адресом указателя на int

getData(&a,&n); 

С помощью этого int * getData(int **a,int *n) вы можете назначить возвращаемый указатель на int на a вне вашей функции. Но не здесь getData(a,&n);. И для возврата указателя на int эта строка не подходит return a;, потому что она возвращает указатель на указатель на int. Который действительно содержит правильное значение (недавно выделенный указатель на int), но это все еще неверно по типу. ...

Примечание:
Вы очень полагаетесь на работу своего fscanf(), поэтому n, который вы используете для размера, может быть неинициализированным ...
И вы не должны использовать while(!feof(f)),
Почему «while (! feof (file))» всегда неверно?
И d кажется неиспользованным внутри ваших функций ...
Поэтому, пожалуйста, прислушайтесь к рекомендации в комментарии М. о чтении предупреждений компилятора.

1
Yunnosch 11 Янв 2021 в 07:46