Meine Strukturdeklaration:Ist eine Schleife erforderlich, um jedes Mitglied eines Arrays von Strukturen auf dem Heap zu setzen?
struct tileStruct
{
SDL_Rect * tilePixel;
Uint32 * tpColor;
int * tileNum;
int * xCoord;
int * yCoord;
};
Hier ist meine Funktion, die ein Array von tileStructs initialisieren muss, aber jedes Mitglied der Struktur ist auf dem Heap.
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
}
Also, meine Frage ist, muss ich das tun?
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));
}
Ja, Sie brauchen definitiv die Schleife für Arrays – CinCout
Sie scheinen ein grundlegendes Missverständnis darüber zu haben, wann dynamischer Speicher geeignet ist. Warum definierst du deine Struktur so? Ist 'tPIXELS_PER_TILE' eine Konstante? Denken Sie daran, dass Sie gerade die dynamischen Mitglieder initialisieren, aber Sie initialisieren nicht, worauf sie hinweisen. Eine geeignetere Lösung wäre, keinen dynamischen Speicher in der Struktur zu haben, dann das gesamte Array mit einem Aufruf von "Calloc" zuzuweisen und zu initialisieren. – paddy
Ich weiß, ich könnte es einfach in den Stapel legen, aber insgesamt instanziiere ich etwa 120.000 SDL_Rect-Strukturen, also dachte ich, ich würde es einfach auf den Haufen legen. Ja, tPIXELS_PER_TILE ist eine Konstante, die ich mit #define gesetzt habe. Es ist 256, und NUM_TILES_IN_WINDOW ist 475. –