1

mallocとcallocの両方を使用して動的配列を作成しているときに問題が発生しました。

    int main(){
      float * xd_real_send;
      int Nooflines_Real;
      int * X;
      フロートテスト[500];

      Nooflines_Real = count_lines(infile);
      printf( "Nooflines_Real:%d \ n"、Nooflines_Real);

      X =(int *)malloc(Nooflines_Real * sizeof(int));
      xd_real_send =(float *)calloc(Nooflines_Real、sizeof(float));

      printf( "X%dのサイズ、%dのテストとxd_real_send%dのサイズ\ n"、
      sizeof(X)/ sizeof(int)、sizeof(test)/ sizeof(float)、
      sizeof(xd_real_send)/ sizeof(float)); fflush(stdout);

    }

そして出力は

    Nooflines_Real:40
    X 2のサイズ、テスト500、xd_real_send2のサイズ

私が間違っていることを教えてください。

4

1 に答える 1

1

Xxd_real_sendはポインタとして定義されます。

適用されたsizeof演算子は、ポインターが参照するサイズではなく、ポインターが使用するメモリーの量を返します。

動的に割り当てられ、何らかのポインタによって参照されると、メモリブロックのサイズを要求することは(移植可能な方法では)不可能です。

動的に割り当てられたメモリの場合、アプリケーションはそれらのメモリブロックの大きさを追跡する必要があります。


testは明示的に配列として定義されているsizeofため、配列のサイズを決定できます。

于 2012-11-15T16:48:07.373 に答える