2012-09-08 139 views
-1

這是怎麼回事?我可以在C中的結構中有一個指向SDL_Surfaces的指針數組嗎?C指針陣列的結構

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

沒有什麼不好,只要你正在初始化指針 – Vlad

+1

你發佈的內容沒有錯。有什麼問題? –

+0

它會導致奇怪的行爲。 SDL_Surface在錯誤的位置傳播,或者根本不傳播。 – MVTC

回答

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

有兩點需要注意:

  1. 您需要檢查每個分配的返回值
  2. 你需要釋放每清理時的分配
+0

SDL處理'IMG_Load(filename);'中的分配。 – MVTC

+0

所以在這種情況下,你根本不應該爲它分配,但是在任何情況下,爲所有指針+數組分配的額外空間都是多餘的。 – MByD