-1

これの何が問題なのですか?C の構造体で SDL_Surfaces へのポインタの配列を持つことはできますか?

typedef struct {
    int next_wheel;
    int pos_X;
    int pos_Y;
    int front_wheel_pos_X;
    int front_wheel_pos_Y;
    int velocity;
    int rear_wheel_pos_X;
    int rear_wheel_pos_Y;
    SDL_Surface* body;
    SDL_Surface* rear_wheel[9];
    SDL_Surface* front_wheel[9];
} mars_rover;

...

mars_rover* init_rover() {
    mars_rover* rover = (mars_rover*)malloc(sizeof(mars_rover) + sizeof(SDL_Surface) * 19);
    rover->body = load_image("Graphics//rover.png", ds_info);
    rover->front_wheel[0] = load_image("Graphics//wheel//wheel0.png", ds_info);
    ...

    return rover;
}

int main() {
    mars_rover* rover = init_rover();
...
}

編集:画像読み込み機能を追加しました。

SDL_Surface *load_image( const char* filename , SDL_VideoInfo* ds_info) {

    SDL_Surface* image = 0;
    SDL_Surface* converted_surface = 0;
    image = IMG_Load(filename);

    if(image) {
        converted_surface = SDL_DisplayFormatAlpha(image);
        SDL_FreeSurface(image);
    }

    return converted_surface;
}
4

1 に答える 1

1

できますが、各ポインターに個別に割り当てられたメモリを割り当てる必要があります。したがって、代わりに:

mars_rover* rover = (mars_rover*)malloc(sizeof(mars_rover) + sizeof(SDL_Surface) * 19);

あなたが持っている必要があります:

mars_rover* rover = malloc(sizeof(mars_rover));
rover->body = malloc(sizeof(SDL_Surface));
for (i = 0; i < 9; ++i) {
    rover->rear_wheel[i] = malloc(sizeof(SDL_Surface));
    rover->front_wheel[i] = malloc(sizeof(SDL_Surface));
}

ただし、2 つの注意事項:

  1. 各割り当ての戻り値を確認する必要があります
  2. クリーンアップ時に各割り当てを解放する必要があります
于 2012-09-08T21:36:14.413 に答える