自定义复制赋值操作符使程序崩溃(c++)
Custom copy assignment operator crashes the program (C++)
我正在创建一个用于自动清理内存的自定义类。该类包含一个指向SDL_Surface对象的指针,并在需要时调用它的refcount。问题是,当我实现自定义复制赋值操作符时,系统崩溃了,代码如下:
" xyz.exe中0x771a15de的未处理异常:0xC0000005:访问违反读取位置0xcccccd04。"
和对象属性"address"突然获得值"0x0000ffff",同时使用默认的复制赋值操作符,它运行得非常好。
您使用的折算不正确。SDL_FreeSurface
将递减refcount,当在空指针上调用时,它是一个no-op。所以,你的赋值操作符应该是这样的:
const Image& Image::operator=(const Image& other){
if (img != other.img){
SDL_FreeSurface(img);
img = other.img;
if (img != NULL)
img->refcount++;
}
return *this;
}
你的析构函数应该是这样的:
Image::~Image(){
SDL_FreeSurface(img);
}
另外,在默认构造函数中,应该将img初始化为空指针。
Image::Image() :img(NULL) {}
参见本页倒数第二个示例:http://sdl.beuc.net/sdl.wiki/SDL_Surface
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Visual Studio在尝试读取resource.txt文件时崩溃
- 将方法转换为调用该方法的成员函子对象会导致崩溃