0

私はこのC関数を持っています:

fill_array(&data, &size);

void fill_array(int **data, int *size){
   printf("Size is:");
   scanf("%d", size);
   *data = malloc(*size * sizeof(int *));
   int i = 0;
   for (i = 0; i < size; i++){
      (*data)[i] = rand() % 11;
   }
}

たとえば、 data[i] を乱数に割り当てたいとします。そのようなことをする方法は?さまざまなバリエーションを試しましたが、常にプログラムがクラッシュします。ありがとう。

4

4 に答える 4

3
*data = malloc(*size * sizeof(**data));
(*data)[5] = 15;

cdecl Web サイトを参照してください。

malloc をキャストしない

質問の編集に従って編集します

for ループにタイプミスが含まれています

for (i = 0; i < size; i++)

そのはず

for (i = 0; i < *size; i++)
于 2013-04-16T13:57:58.787 に答える
1

(*data)[5] = 15;これの代わりに使用できます..の優先順位よりも優先*data[5] = 15;順位が高いため[]*

于 2013-04-16T13:59:15.420 に答える
1

他の人が言ったように、演算子の優先順位を正しくするには括弧を付ける必要があります。「配列」を頻繁に使用する場合は、使いやすい一時変数を作成するとよいでしょう。

int *p;
...
*data = malloc(*size * sizeof **data);
p = *data;

そして、あなたはp[5]などを使うことができます。

于 2013-04-16T14:10:39.747 に答える