繁体   English   中英

如何动态分配结构数组并在其中分配数组?

[英]How to dynamically allocate an array of structs and also allocate an array inside it?

我有两个结构。

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 的新手,请放轻松:)

谢谢你的意见! 我错误地使用了指针算法。 这是更新的工作代码。

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++);
        }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM