如何动态分配结构数组并在内部分配数组?

问题描述 投票:0回答:1

我有两个结构。

typedef struct Side Side;

struct Side{
    bool taken;
    unsigned color;
};

typedef struct{
    Side* sides;
}Cube;

我想动态制作一个包含100个多维数据集的数组,每个多维数据集具有3个面-这也需要是动态的。正确的做法是什么?

void generateCube(Cube** cubes, int size, int (*calculateFunction)(int)){
    *cubes = (Cube*)malloc(sizeof(Cube) * size);
    Cube* cubeIterator = *cubes;
    Cube* endCube = *cubes + sizeof(Cube) * size;
    unsigned sideIndex = 1;

    for(endCube; cubeIterator != endCube; cubeIterator += sizeof(Cube)){
        cubeIterator->sides = (Side*)malloc(sizeof(Side) * 3);

        cubeIterator->sides[0].color = (*calculateFunction)(sideIndex++);
        cubeIterator->sides[1].color = (*calculateFunction)(sideIndex++);
        cubeIterator->sides[2].color = (*calculateFunction)(sideIndex++);
    }
}   

这是我想出的,但是分配给颜色的值不正确。我是C语言的新手,请放心:)

c
1个回答
0
投票

谢谢您的评论!我使用的指针算法不正确。这是更新的工作代码。

void generateCube(Cube** cubes, int size, int (*calculateFunction)(int)){
        *cubes = malloc(sizeof(Cube) * size);
        Cube* iterator = *cubes;
        Cube* end = iterator + size;
        unsigned sideIndex = 1;
        for(end; iterator != end; ++iterator){
                iterator->sides = malloc(sizeof(Side) * 3);

                iterator->sides[0].color = (*calculateFunction)(sideIndex++);
                iterator->sides[1].color = (*calculateFunction)(sideIndex++);
                iterator->sides[2].color = (*calculateFunction)(sideIndex++);
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.