1

私がやろうとしているのは、各要素が異なる配列サイズのポインターの配列を指し、各要素が異なる配列サイズのポインターの配列を指し、各要素が構造を指すポインターの配列を定義することです。

私はこのようなものが必要です:

    array[10]->[12]->[8] = (構造*)malloc(sizeof(構造));
    array[9]->[16]->[2] = (構造*)malloc(sizeof(構造));

メモリを割り当てる方法と、この配列メンバーにアクセスする方法は?

ハビエル。

4

3 に答える 3

1

これがあなたが望むものであることを願っています:

MyStruct*** ddd = malloc(sizeof(MyStruct**) * 2);

ddd[0] = malloc(sizeof(MyStruct*) * 3);
ddd[0][0] = malloc(sizeof(MyStruct) * 2);
ddd[0][1] = malloc(sizeof(MyStruct) * 1);
ddd[0][2] = malloc(sizeof(MyStruct) * 4);

ddd[1] = malloc(sizeof(MyStruct*) * 1);
ddd[1][0] = malloc(sizeof(MyStruct) * 3);

=>

0: [
    0: [
        0: MyStruct,
        1: MyStruct
    ],
    1: [
        0: MyStruct
    ],
    2: [
        0: MyStruct,
        1: MyStruct,
        2: MyStruct,
        3: MyStruct
    ]
],
1: [
    0: [
        0: MyStruct,
        1: MyStruct,
        2: MyStruct
    ]
]

フリーハンドで書きましたが、通常は C++/C# しか書きません。

于 2013-08-19T10:34:25.133 に答える
0

私があなたを正しく理解した限り、異なるサイズの構造体を 3D 配列に格納したい場合は、次のようにします。

typedef struct struct_s
{
    size_t sizeofElement;
    void *ptrToElement;
}struct_t;

void main(void)
{
    struct_t array[X][Y][Z];
    /*...*/
    array[x][y][z].ptrToElement = malloc (sizeof (structure));
    array[x][y][z].sizeofElement = sizeof (structure);

}

したがって、この配列で異なるサイズのオブジェクトを処理できます。サイズを尋ねて、それらを正しく処理します。

編集:

異なる次元に異なるサイズを持たせることはできないことを覚えておいてください。

array[x][y][z];

としてメモリを要求しているだけです

void ***ptr = malloc (sizeof(type)*x + sizeof(type)*y + sizeof(type)*z;

するでしょう。

独自のポインタを次のように分割するだけです

 void ***ptr = malloc (sizeof(type1)*x + sizeof(type2)*y + sizeof(type3)*z;
于 2013-08-19T10:25:24.753 に答える