EXC_BAD_ACCESS当我尝试检查 NULL 时
EXC_BAD_ACCESS when I'm trying to check for NULL
我正在尝试基于Lazyfoo的Awesome Tutorials(http://lazyfoo.net/tutorials/sdl/sdl/10_color_keying/index.php),但是当我时尝试运行它,尽管我正在尝试测试该指针是否为null,但该线程在指针上为我提供了一个指针上的exc_bad_access(代码= 1,地址= 0x0)。这是班级的样子:
//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;
};
这是Intial和销毁方法:
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;
}
}
您可以在线看到,当我测试mextule是否为null时,出现问题,我认为这应该是有效的,但由于某种原因不是。我究竟做错了什么?发布更多代码会有所帮助吗?
问题可能是您不处理复制和移动。
每当您复制LTexture
时,仅复制指针。如果该副本不在范围内,则称为击曲线。然后,原件在某个时刻脱离范围,并且在同一指针上再次调用击曲线。
我建议使用智能指针:
#include <memory>
class TextureDeleter { void operator()(SDL_Texture* t) { SDL_DestroyTexture(t); };
// in the class
std::unique_ptr<SDL_Texture, TextureDeleter> mTexture;
然后您可以删除破坏者。
edit :如果您真的不想使用<memory>
,则只需添加
LTexture(const LTexture &) = delete;
LTexture& operator=(const LTexture &) = delete;
LTexture(LTexture &&) = delete;
LTexture& operator=(LTexture &&) = delete;
到您的班级。
但是,正如评论中指出的那样,这仅在您实际上不需要移动或复制课程时才有效。如果这样做,则必须使用shared_ptr
,这是不平凡的。
相关文章:
- 检查字符串是否"null" C++
- C++,检查当我无法使用 NULL/0 时是否初始化了变量
- 类返回对象类型,但如何返回和检查 null
- C++如何将结构数组初始化为null,然后在while循环中检查该数组的元素是否为null
- 我可以根据null或特定类型的值检查引用吗
- 如何避免对具有组合关系的Object进行null检查
- EXC_BAD_ACCESS当我尝试检查 NULL 时
- 从多个来源检查NULL:共享_ptr vs double指针
- boost :: asio :: io_service检查是否为null
- 我如何检查该点动态分配的单指针是否为null
- 检查指针是否为null,然后在同一if语句中取消引用它,这样安全吗
- 为什么strlen()比手动循环检查以null结尾的字符快20倍
- NULL /空字符串检查:CPU开销
- NULL指针检查线程安全
- 如果我无法访问字符串变量,如何检查 NULL(空/0) 字符串
- 我应该检查NULL在我的赋值操作符
- 在模板类中使用c++宏检查null
- Qt或C++检查NULL条件
- 函数参数作为引用,以避免检查NULL
- 为什么要根据ISO C++避免在新的之后检查null