16

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;
}

割り当てられたデータに特定のポインターを割り当てる必要がある「初期化」関数があります(問題ではありません)。このポインターが変更され、コードでさらに使用できるようにするには、関数へのポインターをどのように与える必要がありますか (その関数呼び出しが返された後)。

4

2 に答える 2

27

*a ポインターを調整する必要があります。これは、ポインターを *a に渡す必要があることを意味します。次のようにします。

int *a;

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

int main()
{
    initArray( &a );
    return 0;
}
于 2010-03-21T06:41:15.590 に答える
8

arr内部で値によって割り当ててinitArrayいるため、 の値への変更arrは外部からは見えません。arrポインタで渡す必要があります:

void initArray(int** arr) {
  // perform null-check, etc.
  *arr = malloc(SIZE*sizeof(int));
}
...
initArray(&a);
于 2010-03-21T06:41:25.823 に答える