3

ポインターを使用して、配列に格納された std からデータを取得しようとしています。main は d を as として宣言しint *d;、関数は using を使用して呼び出されx = getdata(&d);ます。gdb を使用してステップ実行すると、for ループの最初の反復で *d[i]=val; を試行すると終了します。

int getdata(int **d)
{ 
    int count,val,i,j=0; 

    scanf("%d", &count);

    d = malloc(sizeof *d * count);
    for( i = 0; i < count-1; i++) {

    scanf("%d",val);

    *d[i]=val;  

    }

    for ( i = 0; i < count; i++)
            printf("Number %d\n",*d[i]);

    return count;

}

4

3 に答える 3

2

あなたが持っているのは、ポインターの配列ではなく、配列へのポインターです。

1) void* を返すため、代わりにmalloc結果を代入する必要があります*dd

2)必要なデータサイズはintではなくですint*(を使用すると、intである場所が*d取得されます)int***d

*d = malloc(sizeof(**d) * count);

3) 配列の索引付けには、わずかに異なる構文が必要です

(*d)[i] = val;

printf("%d\n", (*d)[i]);

4) 2 番目の scanf には、int ではなくポインターが必要です。

scanf("%d", &val);
于 2013-01-18T00:27:25.693 に答える
2
*d = malloc(count * sizeof(int));

それから

(*d)[i] = val
于 2013-01-18T00:28:20.310 に答える
2

メモリは次のように割り当てる必要があります

*d = malloc(count * sizeof **d);

値は次のようにアクセスする必要があります

(*d)[i] = val;

countまた、要素を割り当て、入力サイクルで要素のみを初期化する理由も明確ではありませんcount - 1(そして、後でcount出力サイクルですべての要素を出力します)。

于 2013-01-18T00:35:42.653 に答える