Inicializando un puntero en una función separada en C

Resuelto pechenie asked hace 14 años • 2 respuestas

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)?

pechenie avatar Mar 21 '10 13:03 pechenie
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;
}
Michael Anderson avatar Mar 21 '2010 06:03 Michael Anderson

Estás asignando arrun valor interno initArray, por lo que cualquier cambio en el valor de arrserá invisible para el mundo exterior. Necesitas pasar arrpor puntero:

void initArray(int** arr) {
  // perform null-check, etc.
  *arr = malloc(SIZE*sizeof(int));
}
...
initArray(&a);
kennytm avatar Mar 21 '2010 06:03 kennytm