gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:21:39 25 4
gpt4 key购买 nike

我的结构声明:

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 元素的 struct tileStruct 数组,因此您需要遍历所有元素。而您之前的 tileInit() 仅初始化第一个元素。

可能最好用下一种方式重新定义你的类型:

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com