0

これは、私が持っている 2 つの構造体の簡略化されたバージョンです。

struct MyStruct1 {
    double d;
}

struct MyStruct2 {
    struct MyStruct1* a;
    int i;
}

2 番目の構造体は次のように初期化できます。

void InitStruct(struct MyStruct2 pMyStruct2) {
    static struct MyStruct1 A[] = { {.d=12} , {.d=17} , {.d=1} };
    *pMyStruct2 = (struct MyStruct2) { .a = A, .i = 3 };
}

しかし、実際にはこの方法で初期化する必要があります (この構造体は、一度に初期化されるより大きな構造体の一部であるためです):

void InitStruct(struct MyStruct2 pMyStruct2) {
    *pMyStruct2 = (struct MyStruct2) { 
        .a = (struct MyStruct1[]) {
            {.d=12} , {.d=17} , {.d=1}},
        .i=3 };
}

どちらの方法でも警告なしでコンパイルできますが、2 番目のソリューションのデータは破損します。

内部配列は静的ではないため、.a-pointer はすぐに無効になると思います。

配列のデータをメモリに保持するようにコンパイラに指示する別の方法はありますか?

4

1 に答える 1