2012-12-12 110 views
-1

我有這個,在我的頭:段錯誤 - 改變結構變量(另一種結構的內)

struct Surface { 
     char *objectName; 
     int xPos; 
     int yPos; 
     SDL_Surface *surface; 
    }; 

    struct WorldSurface { 
     Surface *surface = new Surface[MAX_SURFACES]; 
     int counter = 0; 
     int current = 0; 
    }; 

    WorldSurface *worldSurface; 

我然後初始化worldSurface中的.cpp:

WorldSurface *worldSurface = new WorldSurface[MAX_LEVELS]; 

而這個功能,我無法開始工作,無論如何,都嘗試過用= NULL,指針, - >來代替。的......(請記住,我對指針主題不是很懂)

void drawClass::addSurface(char* objectName, char* surfaceFile, int xPos, int yPos, int drawLevel) { 
     int cnt = worldSurface[drawLevel].counter; 
     worldSurface[drawLevel].surface[cnt].objectName = objectName; 
     worldSurface[drawLevel].surface[cnt].surface = load_image(surfaceFile); 
     worldSurface[drawLevel].surface[cnt].xPos = xPos; 
     worldSurface[drawLevel].surface[cnt].yPos = yPos; 
     worldSurface[drawLevel].counter++; 
    } 

它是10個世界表面,每個表面都包含50個表面結構,我想要訪問位於worldSurface [drawLevel]中的結構,並且我想訪問的表面結構在worldSurface中,在.counter變量中是已知的。但所有的底層表面結構的通路都會因分段故障而失敗,並且我不知道爲什麼...

感謝您的幫助!

+0

您嘗試過自動在世界表面結構中自動分配曲面嗎?沒有看到任何推理,使動態分配,只需使用表面[MAX_SURFACES] –

+2

Surface * surface = new Surface [MAX_SURFACES];這不會編譯如果在結構中定義 – Matt

+0

修復它!不知道爲什麼,但非常感謝男人!我現在需要睡覺,如果你可以留下一個簡短的解釋,爲什麼,將不勝感激。 :) – GigaBass

回答

1

WorldSurface沒有定義,也沒有正確初始化:

struct WorldSurface { 
    Surface *surface = new Surface[MAX_SURFACES]; 
    int counter = 0; 
    int current = 0; 
}; 

不能與類的聲明一起到位初始化數據。您需要在構造函數中執行此操作,例如:

struct WorldSurface { 
    Surface *surface; 
    int counter; 
    int current; 
}; 
... 
WorldSurface::WorldSurface(): 
    counter(0),current(0),surface(new Surface[MAX_SURFACES]){} 
+0

再次感謝大家!我明白是什麼問題:) – GigaBass