Search code examples
cpointersinitializing

Initializing a pointer in a separate function in C


I need to do a simple thing, which I used to do many times in Java, but I'm stuck in C (pure C, not C++). The situation looks like this:

int *a;

void initArray( int *arr )
{
    arr = malloc( sizeof( int )  * SIZE );
}

int main()
{
    initArray( a );
    // a is NULL here! what to do?!
    return 0;
}

I have some "initializing" function, which SHOULD assign a given pointer to some allocated data (doesn't matter). How should I give a pointer to a function in order to this pointer will be modified, and then can be used further in the code (after that function call returns)?


Solution

  • You need to adjust the *a pointer, this means you need to pass a pointer to the *a. You do that like this:

    int *a;
    
    void initArray( int **arr )
    {
        *arr = malloc( sizeof( int )  * SIZE );
    }
    
    int main()
    {
        initArray( &a );
        return 0;
    }