1

最近、構造体に動的にメモリを割り当てる必要がある割り当てがありました。私はこの方法を使用しました:

myStruct *struct1 = malloc(sizeof *struct1);

これはうまくいきました。しかし、その方法がわかりません。struct1その時点ではポインタは初期化されていないので、サイズは何もないはずだと思います。したがって、malloc(sizeof *struct1)割り当てる有効な量のメモリをどのように返すのでしょうか。

4

3 に答える 3

5

sizeofCの演算子はオペランドを評価しません。タイプを見るだけです。例えば:

#include <stdio.h>

int main(void)
{
    int i = 0;
    printf("%zu\n", sizeof i++);
    printf("%d\n", i);
    return 0;
}

上記のプログラムを実行すると、それiはまだ0であることがわかります。

したがって、あなたの例で*struct1は、評価されず、型情報にのみ使用されます。

于 2013-03-27T02:23:08.857 に答える
0
malloc(sizeof(*struct1))

宣言した構造体変数の数に応じて、構造体のサイズに等しい量のメモリを割り当てます。Sizeofは、コンパイル時に検出されるstruct1のサイズを返すために使用されます。

于 2013-03-27T02:25:05.890 に答える
0

これを試してみてください。最初に構造を宣言し、

typedef struct {

int a;
int b;
int c;

}MyStruct;

次に、メモリを割り当てる前に、1つの構造変数を初期化し、指定されたとおりにメモリを割り当てます。

MyStruct test;

printf("~~~~~ sizeofStruct: %ld", sizeof(test));

MyStruct *myAlloc = (MyStruct *)malloc(sizeof(test));

printf("~~~~~ sizeofmyAlloc: %ld", sizeof(*myAlloc));

乾杯 !

于 2013-04-29T09:08:39.463 に答える