Inicializando un puntero en una función separada en C
Necesito hacer una cosa simple, que solía hacer muchas veces en Java, pero estoy atascado en C (C puro, no C++). La situación se ve así:
int *a;
void initArray( int *arr )
{
arr = malloc( sizeof( int ) * SIZE );
}
int main()
{
initArray( a );
// a is NULL here! what to do?!
return 0;
}
Tengo alguna función de "inicialización", que DEBE asignar un puntero determinado a algunos datos asignados (no importa). ¿Cómo debo asignar un puntero a una función para que este puntero se modifique y luego pueda usarse más en el código (después de que regrese la llamada a la función)?
Aceptado
Necesita ajustar el puntero *a, esto significa que necesita pasar un puntero al *a. Lo haces así:
int *a;
void initArray( int **arr )
{
*arr = malloc( sizeof( int ) * SIZE );
}
int main()
{
initArray( &a );
return 0;
}
Estás asignando arr
un valor interno initArray
, por lo que cualquier cambio en el valor de arr
será invisible para el mundo exterior. Necesitas pasar arr
por puntero:
void initArray(int** arr) {
// perform null-check, etc.
*arr = malloc(SIZE*sizeof(int));
}
...
initArray(&a);