私はLazyFooの素晴らしいチュートリアル(http://lazyfoo.net/tutorials/SDL/10_color_keying/index.php)に基づいて単純なカラーキーイングエンジンの例を実装しようとしていますが、実行しようとするとスレッドはEXC_BAD_ACCESS 1、address = 0x0)がポインタにヌルかどうかをテストしようとしているにもかかわらず、NULLをチェックしようとしたときにEXC_BAD_ACCESS
//Texture wrapper class
class LTexture
{
public:
//Initializes variables
LTexture();
//Deallocates memory
~LTexture();
//Loads image at specified path
bool loadFromFile(std::string path);
//Deallocates texture
void free();
//Renders a texture at a given point
void render(int x, int y);
//Gets an image's dimensions
int getWidth();
int getHeight();
private:
//The actual hardware texture
SDL_Texture* mTexture = NULL;
//Image dimensions
int mWidth;
int mHeight;
};
、ここでintializeだとメソッドを破壊する:ここでは、クラスは次のようになります
LTexture::LTexture()
{
//Initialize
mTexture = NULL;
mWidth = 0;
mHeight = 0;
printf("I initialized");
}
LTexture::~LTexture()
{
free();
}
そして、私のエラーがLTexture::free
方法にあります。
void LTexture::free()
{
//Free texture if it exists
if (mTexture != NULL) //HERE IS THE ISSUE. WHAT IS WRONG WITH THIS?
{
SDL_DestroyTexture(mTexture);
mTexture = NULL;
mWidth = 0;
mHeight = 0;
}
}
あなたはインラインで見ることができるように、mTextureがNULLであれば、私がテストしたときの問題は、私が有効であるべきだと考えており、表示されますが、何らかの理由でそうではありません。私は間違って何をしていますか?コードの詳細を投稿するのに役立つでしょうか?
はい、そうです。あなたはおそらくテクスチャをコピーしていますが、あなたのコードはこれを適切に処理しません。 – user3684240
私は理解していません...どこでテクスチャをコピーしていますか?私はfree()がテクスチャがコピーされているかどうか気にしないと思った? – WulffHunter
それは彼が意味するものではありません。 1. 'LTexture(const LTexture&)= delete;'をクラス定義に入れます。 2.コンパイルすると、オブジェクトクラスのインスタンスをコピーしている場所がすぐに表示されます(これはもはや実行できないためです)。詳細については、[3つのルール](https://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming))を参照してください。 – WhozCraig