4

4 つの整数で構成されるグローバル構造体 (配列) を特定する必要があります。問題は、その構造体配列のサイズが事前にわからないことです。

私はsthを作ろうとしています。このような:

typedef struct
{
    int value;
    int MAXleft;
    int MAXright;
    int MAX;
} strnum;

int main ()
{
    int size;
    scanf("%d", &size);

    strnum numbers[size];

    return 0;
}

ポインターでこれを行うことは可能だと聞きましたが、方法がわかりません。

4

3 に答える 3

5

次のように、いくつかの構造に動的にスペースを割り当てることができます。

strnum *numbers = malloc( size * sizeof(strnum) );

その後、通常の配列と同じように使用できます (ほとんど)。

callocの代わりに使用した方が便利かもしれませんmalloc。多数のブロックを割り当て、ゼロで埋めます。malloc割り当てられたメモリはクリアされないことに注意してください。

strnum *numbers = calloc( size, sizeof(strnum) );

メモリを使い終わったら、 を呼び出すことを忘れないでくださいfree( numbers )。これにより、割り当てられたメモリがメモリ マネージャに返されます。

free必要がなくなったときにそれを行わず、さらに割り当てを増やすと、プログラムが動作し続けるため、プログラムのメモリフットプリントが正当な理由もなく増加します。これはメモリ リークと呼ばれ、回避する必要があります。最終的に、プログラムのメモリが不足し、予測できない結果になる可能性があります。

stdlib.hまた、メモリ割り当て関数のプロトタイプを含むヘッダーを含めることを忘れないでください。

于 2012-10-18T10:31:52.317 に答える
0

malloc() から始めて、サイズが増え続けたら realloc() を実行できます。realloc() の呼び出し回数を減らすために、一度に 10 個の構造体のプールを割り当てることをお勧めします。

于 2012-10-18T10:49:24.817 に答える
0

それは動的メモリ割り当てと呼ばれます

あなたがやろうとしていることは、次のように行うことができます:

   strnum* number;
   int size = 0;

   scanf("%d",&size);

   number = malloc(size * sizeof(strnum));

また、配列を使い終わったら、メモリを解放することを忘れないでください。

   free(number);
于 2012-10-18T10:31:46.480 に答える