2

メインにサイズがわからないポインタがあります。関数はこのポインタをmainに返します。関数内では、ポインターのサイズを計算できるため、値を格納してmainに戻す必要があります。この場合のメモリの変更/割り当て方法。

int main()
{
    int *row_value, *col_value;
    col_row_value(row_value,col_value);
    ...
    return(0);
}

void col_row_value(row_value,col_value)
{
    // how to allocate/modify memory for row_value and col_value and store data
    // for example would like to allocate memory here
    int i;
    for(i=0;i<10;i++) {
        row_value[i]=i;
        col_value[i]=i;
    }
}

私はこのようなことを試みました、それはうまくいきません

int main()
{
    int *row_value, *col_value;
    row_value=NULL;
    col_value=NULL;
    col_row_value(&row_value,&col_value);
    ...
    return(0);
}

void col_row_value(int **row_value,int **col_value)
{
    // how to allocate/modify memory for row_value and col_value and store data
    // for example would like to allocate memory here
    int i;
    *row_value=(int*)realloc(*row_value,10*sizeof(int));
    *col_value=(int*)realloc(*col_value,10*sizeof(int));
    for(i=0;i<10;i++) {
        row_value[i]=i;
        col_value[i]=i;
    }
}
4

2 に答える 2

1

2番目のバージョンは本質的に正しいです。

あなたは言う必要があります:

realloc(*row_value, 10 * sizeof(int));
//     ^^^

スターに気をつけろ!

それが役立つ場合は、関数の引数の名前を次のように変更します。

col_row_value(int ** ptr_to_row_ptr, int ** ptr_to_col_ptr);

そうすれば、それほど混乱することはありません。

于 2012-09-07T07:36:41.723 に答える
1

これ:

*row_value=(int*)realloc(row_value*,10*sizeof(int));

する必要があります:

*row_value = realloc(*row_value,10*sizeof(int));
                 /** ^ **/

キャストは不要であることに注意してください。再割り当てが失敗した場合に備えて、の結果をrealloc()一時ポインタに割り当てます。これは、元のメモリにアクセスできないことを意味します。

int* tmp = realloc(*row_value, 10 * sizeof(*tmp));
if (tmp)
{
    *row_value = tmp;
}

ループは、または:forの最初の要素に値を割り当てないことに注意してください。row_valuecol_value

for(i=1;i<10;i++)

インデックスから始まり、1内の割り当ては次のforようになります。

(*row_value)[i] = i;
(*col_value)[i] = i;
于 2012-09-07T07:36:53.307 に答える