2011-12-09 57 views
0

我已經通讀了每個訪問衝突寫在這裏我可以找到的位置問題,也許我錯過了一些東西,但我似乎遇到了不同的錯誤。我初始化了所有的指針(據我所知)。SDL訪問衝突寫入位置0x02a251c8

void putpixel(SDL_Surface* surface, int x, int y, Uint32 pixel) 
{ 
    int k = GetWidth(surface); 
    //Convert the pixels to 32 bit 
    Uint32 *pixels = (Uint32 *)surface->pixels; 

    //Set the pixel 
    pixels[ (y * surface->w) + x ] = pixel; //This is the line the debugger points to. 
} 

該程序顯示Mandelbrot集。這是我用來訪問像素數據的功能。當我第一次編寫程序時,它全部在int main()中,並且使用這個函數很好地工作。我打算用SDL和指針編寫這個練習,所以我將它分解並將Mandelbrot作爲自己的類來學習一些關於OOP的知識。只有一次我把它分開了,我開始有這些問題。有什麼明顯的我失蹤了嗎?我很樂意發佈其餘的代碼,我只是不想用無關緊要的代碼淹沒你們。當我追溯問題時,它指向實際代碼中的putpixel函數以繪製集合,這很有道理。問題是否源於此?

編輯:劃痕。我做了一些錯誤處理,並且我確實鎖定了曲面。

回答

2

小心直接操作數據,具體取決於表面的類型,需要SDL_LockSurface/SDL_UnlockSurface。

在未進行任何更改您訪問的位置錯誤,請檢查/打印值ysurface->wx

+0

看我的編輯。我想我正確鎖定了表面,但我覺得我犯了一個愚蠢的錯誤。 –

0

問題解決了。我是一個完全白癡。我得到這個錯誤的原因是因爲我超過了像素數組的邊界。這個問題來自於我如何定義設置集合參數的函數。我將高度設置爲寬度和寬度。我知道這是明顯的。讓這對其他像我這樣的新手程序員來說是一個教訓。如果你得到這樣一個奇怪的神祕錯誤,檢查簡單的東西。像這樣的監督會花費你很多時間。