Я должен сделать простую вещь, которую я раньше делал много раз в Java, но я застреваю в C (чистый C, не C++). Ситуация похожа на это:
int *a;
void initArray( int *arr )
{
arr = malloc( sizeof( int ) * SIZE );
}
int main()
{
initArray( a );
// a is NULL here! what to do?!
return 0;
}
У меня есть некоторая функция "инициализации", которая ДОЛЖНА присвоить данную подсказку на некоторые выделенные данные (не имеет значения). Как я должен дать подсказку к функции, чтобы к этому указателю будет изменен и затем может использоваться далее в коде (после того, как тот вызов функции возвращается)?
Вам нужно настроить указатель * a, это означает, что вам нужно передать указатель на * a. Это делается следующим образом:
int *a;
void initArray( int **arr )
{
*arr = malloc( sizeof( int ) * SIZE );
}
int main()
{
initArray( &a );
return 0;
}
Вы назначаете arr
по значению внутри initArray
, поэтому любое изменение значения ] arr
будет невидимым для внешнего мира. Вам нужно передать arr
по указателю:
void initArray(int** arr) {
// perform null-check, etc.
*arr = malloc(SIZE*sizeof(int));
}
...
initArray(&a);