0

文字を入力した後、 realloc を使用して要素を配列に追加しようとしています。これが私のコードです:

   #include <stdio.h>
   #include <stdlib.h>

   int main(void)
   {
      int i, j, k;
      int a = 1;
      int* array = (int*) malloc(sizeof(int) * a);
      int* temp;
      for(i = 0;;i++)
      {
          scanf("%d", &j);
          temp = realloc(array, (a + 1) * sizeof(int));
          temp[i] = j;
          if(getchar())
            break;
      }
      for(k=0; k <= a; k++)
      {
          printf("%d", temp[k]);
      }
   }

この小さなプログラムを実行すると、たとえば : 2 3 4 と入力すると、 me: 20; と表示されます。メモリが適切に割り当てられていないことはわかっていますが、問題がわかりません。前もって感謝します。

4

1 に答える 1

0

まず:

    int* array = (int*) malloc(sizeof(int) * a);
    int* temp = array;

    temp = realloc(temp, (a + 1) * sizeof(int));

呼び出し後、最初の引数として渡された 'realloc' ポインターが無効になる可能性があるためです。

もちろん、'realloc' は常に 2 に等しい 2 番目のパラメーターで呼び出されます。

ちなみに、「scanf」は、最初の非数字文字の後に入力文字列の読み取りを停止します。関数の正しい使用方法については、ドキュメントを参照してください。たとえば、scanf()または realloc()について。

于 2013-01-08T00:07:44.353 に答える