何らかの理由で、渡された構造体の値が、私にアクセスすることなく変更されます。私はこれをVisual Studioでデバッグして見つけました。コードは次のとおりです。C++ - 値が予期せず変更される
bool Screen::blitSurface(SDL_Surface* src, int x, int y, SDL_Rect* rect) {
SDL_Rect* offset;
offset->x = x;
offset->y = y;
SDL_BlitSurface(src, rect, screen, offset);
return true;
}
変更される構造体は 'rect'です。それが渡されると、rect-> xは0、rect-> yは16です。しかし、次のブレークポイント(offset-> x = x;)ではrect-> xは乱数です(たとえば-13108)。 rect-> yと同じです。誰がなぜこのようなことが起こるかについてのアイデアはありますか?私は完全に迷っていて、どこから始めたらいいのかわかりません。
--EDIT--
[OK]を、私はこれにコードを更新し、それはまだ問題を抱えています。
bool Screen::blitSurface(SDL_Surface* src, int x, int y, SDL_Rect* rect) {
SDL_Rect offset;
offset.x = x;
offset.y = y;
SDL_BlitSurface(src, rect, screen, &offset);
return true;
}
しかし、私は考えました。ローカルの構造体を作成してポインタを返すと、関数が完了するとその構造体は削除されますか?たとえば、これは機能しますか?
SDL_Rect* getRect(int x, int y, int width, int height) {
SDL_Rect rect;
rect.x = x;
rect.y = y;
rect.w = width;
rect.h = height;
return ▭
}
これは、私が 'blitSurface'に渡す 'rect'変数を取得する場所です。
あなたは・オフセット 'のための任意のメモリを割り当てられていませんでした。これはどのように機能すると思いますか? – ildjarn
"次のブレークポイント"はどこですか?関数が返った後? 'SDL_BlitSurface()'の呼び出し後? –
変更するのは 'rect'ではなく' * rect'です。スプーンとあなたの区別のようなものです。 –