2013-05-10 54 views
0

所以我有一個問題,我有一個結構稱爲圖像和一個函數,的LoadImage,它工作一切正常,但當我有這樣的事情:SDL加載圖片時,在結構

Animation.h

typedef struct Anim 
{ 
Anim_data anim_data[20]; 
Image* img_anim; 
int curr; 
}Anim; 


void AnimLoad(char* name, Anim* a) 
{ 
ImageLoad("../../Resource/pingvin.jpeg", a->img_anim); 

} 

ImageLoad函數中斷我認爲它與a-> img_anim有關,但是沒有看到它有什麼問題,當我給一個Image結構時我工作的很好,我沒有在另一個結構中。

所以只是爲了清楚該功能的作品,它只是不會當我給它一個結構圖像,我從另一個結構調用。

回答

3

您將n節日會像這樣分配的A-> img_anim空間:

Anim a; 
a.img_anim = malloc(sizeof(Image *)); 
a.img_anim = Address of image. 

然後在你的函數它應該工作。

編輯:

在結構的C99規範,它沒有初始化,除非你初始化手動如:

struct a{ 
int member1; 
int member2; 
} 

struct a example = {.member1 = 2002,.member2 = 3003}; //This is initialization manually. This is like manually allocating an array with 
//Int[] a = {1, 2, 3}; 

否則,你需要這樣做:

struct a; 
    a.member1 = malloc(sizeof(int)); 
    a.member2 = malloc(sizeof(int)); 

這會給member1和member2內存大小4個字節(這是一個整數)。
如果你不這樣做,member1和member2在內存中沒有斑點!

+0

它的工作原理,非常感謝你這幾個小時在竊聽我,你能解釋爲什麼我必須在這裏動態地分配內存嗎? – 2013-05-10 18:16:54

+0

爲什麼需要在結構中分配一個正常的int?我從來沒有見過這個。當你創建一個結構的實例時,stuct的內存被保留但是沒有被初始化。只有指針需要單獨配對。 – Devolus 2013-05-10 19:33:58

+0

你說得對,只有指針需要用malloc在一個struct中初始化。我的意思是讓它們成爲int指針。 – Magn3s1um 2013-05-10 19:39:45