c - 是否需要一个循环来将结构数组的每个成员设置在堆上?

标签 c arrays struct

我的结构声明:

struct tileStruct
{
    SDL_Rect * tilePixel;
    Uint32 * tpColor;
    int * tileNum;
    int * xCoord;
    int * yCoord;
};

这是我的函数,需要初始化一个tileStructs数组,但该结构的每个成员都在堆上。

void tileInit()
{
    struct tileStruct * tileArr = (struct tileStruct *)malloc(NUM_TILES_IN_WINDOW * sizeof(struct tileStruct)); 

    tileArr->tilePixel = (SDL_Rect *) malloc(tPIXELS_PER_TILE * sizeof(SDL_Rect));   

    tileArr->tpColor = (Uint32 *) malloc(tPIXELS_PER_TILE * sizeof(Uint32));        
    tileArr->xCoord = (int *) malloc(sizeof(int));                                   
    tileArr->yCoord = (int *) malloc(sizeof(int));
    tileArr->tileNum = (int *) malloc(sizeof(int));

    //rest of function
}

所以,我的问题是,我需要这样做吗?

struct tileStruct * tileArr = (struct tileStruct *)malloc(NUM_TILES_IN_WINDOW * sizeof(struct tileStruct)); 

for(int i = 0; i < NUM_TILES_IN_WINDOW; i++)
{
    tileArr[i].tilePixel = (SDL_Rect *) malloc(tPIXELS_PER_TILE * sizeof(SDL_Rect));   

    tileArr[i].tpColor = (Uint32 *) malloc(tPIXELS_PER_TILE * sizeof(Uint32));        
    tileArr[i].xCoord = (int *) malloc(sizeof(int));                                   
    tileArr[i].yCoord = (int *) malloc(sizeof(int));
    tileArr[i].tileNum = (int *) malloc(sizeof(int));
}

最佳答案

是的,你应该使用循环。由于您已经分配了包含 NUM_TILES_IN_WINDOW 元素的 structtileStruct 数组,因此您需要迭代所有元素。并且您之前的 tileInit() 仅初始化第一个元素。

也许用下面的方式重新定义你的类型会更好:

struct tileStruct
{
    SDL_Rect tilePixel[tPIXELS_PER_TILE];
    Uint32 tpColor[tPIXELS_PER_TILE];
    int tileNum;
    int xCoord;
    int yCoord;
};

通过这样的定义,您可以避免一堆辅助分配。 (当然,只有当structtileStruct对其每个元素都有逻辑所有权时,这种方式才是可接受的。)

关于c - 是否需要一个循环来将结构数组的每个成员设置在堆上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37914401/

相关文章:

c - 如何计算流程的完成时间? - 最短剩余时间优先算法

javascript - 在 JS/NodeJS 中,当对象从数组中删除时会发生什么?

PHP 更新序列化数据

c# - struct类型的深拷贝在 “Using……”的block中是不是也被dispose了?

c - strcpy(m+1,m) 的不可预测行为

c - Typedef 函数指针 - 使用与不使用之间的区别

编译器错误 "missing ' ;' before ' type'"不确定原因

javascript - 将具有公共(public)键的对象分组到数组中

c++ - 读取访问冲突,错误代码 0xFFFFFFFFFFFFFFFF

c# - 获取属性会影响结构的大小吗?