2011-12-09 12 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. 
} 

プログラムはマンデルブロセットを表示します。これは、ピクセルデータにアクセスするために使用していた関数です。私が最初にプログラムを書いたとき、それはint main()内にあり、この関数を使ってうまくいきました。私はこれをSDLとポインタを使った演習として書こうと思ったので、それを分割してMandelbrotを独自のクラスにしてOOPについて少し学びました。一度私はそれを分割しただけで、私はこれらの問題を抱え始めた。明白な何かがありますか?私はコードの残りの部分を投稿して喜んで、私はちょうど無関係なコードで皆さんを溢れさせたくありません。問題を追跡すると、セットを描画するための実際のコードのputpixel関数が指し示されます。これは意味があります。問題はそこで起きていますか?

EDIT:スクラッチ。私はいくつかのエラー処理を行い、私は間違いなく表面を正しくロックしています。

答えて

2

表面のタイプに応じて、データを直接操作するように気をつけてください。SDL_LockSurface/SDL_UnlockSurfaceが必要です。解決あなたのアクセス位置の誤差には何も変更されていない場合には

yの値を印刷/チェック、surface->wx

+0

私の編集を参照してください。私は表面を正しく固定していると思うが、私は愚かな間違いをしているように感じる。 –

0

問題。私は完全なばかだ。このエラーが発生した理由は、ピクセルの配列の境界を超えていたためです。問題は、セットのパラメータを設定する私の関数をどのように定義したかに由来します。私は高さとして幅と幅を設定していました。私はそれが何か明白であることを知っていた。これは私のような他の初心者プログラマーにとっての教訓にしましょう。このような不思議な間違ったエラーが出たら、簡単なものを調べてみてください。このような見落としは、あなたに多くの時間を要します。

関連する問題