1

関数で配列へのポインターを渡して、それを戻そうとしています。問題は、正しく初期化した後、関数が NULL ポインターを返すことです。私のロジックの問題は何ですか?

配列が宣言されている私の関数は次のとおりです。

void main()
{
     int errCode;
     float *pol1, *pol2;
     pol1 = pol2 = NULL;
     errCode = inputPol("A", pol1);
     if (errCode != 0)
     { 
         return;
     }

     // using pol1 array

     c = getchar();
}

そして、ここに初期化を伴う関数があります:

int inputPol(char* c, float *pol)
{
    pol= (float *) calloc(13, sizeof( float ) );
    while( TRUE )
    {
         // While smth happens
         pol[i] = 42;
         i++;
    };
}
4

1 に答える 1

5

pol1 のアドレスを渡す必要があるため、main は割り当てられたメモリの場所を認識します。

void main()
{
    int errCode;
    float *pol1, *pol2;
    pol1 = pol2 = NULL;
    errCode = inputPol("A", &pol1);
    if (errCode != 0)
    { 
         return;
    }

    // using pol1 array

    c = getchar();
}

int inputPol(char* c, float **pol)
{
    *pol= (float *) calloc(13, sizeof( float ) );
    while( TRUE )
    {
         // While smth happens
         (*pol)[i] = 42;
         i++;
    };
}
于 2012-11-24T11:29:59.303 に答える