分段故障和运算符过载
Segmentation fault and operator overloading
考虑以下代码:
bool Queue::operator+=(int value) {
std::cout << "Appending the value " << value;
std::cout << " by using operator overloading." << std::endl;
// in the actual code: q->append(value);
return false;
}
int main() {
Queue *q = new Queue();
for (unsigned i = 0; i < 1000; i++) {
q+=6;
}
q->append(6);
delete q;
return EXIT_SUCCESS;
}
我在实际实现中有更多的代码,但主要问题是:
我尝试使用运算符重载作为一个追加函数,它向Queue
对象添加一个元素。主要功能与函数Queue::append
配合使用。无论如何,我编译了这段代码,+=
运算符重载编译时没有出现错误。但程序还是崩溃了。
调试时,似乎每当我在使用重载后使用Queue
对象q
(例如,只是析构函数或类似Queue::append
的另一个函数)时,我都会出现分段错误。
我不明白我做错了什么。
显然,在这个例子中,重载包括一个输出和返回一个bool
。
q
被声明为指向Queue
的指针。
表达式q += 6
不使用您声明的运算符重载,它使用指针算术的标准运算符,并导致将指针地址添加到。
在for
循环之后,q
不再指向Queue
对象,并且访问它会导致分割故障。
要访问q
指向的对象,必须取消引用指针,例如*q
。
相关文章:
- 分段故障(堆芯转储)矢量
- 为什么比较运算符如此快速
- C++中的动态铸造故障
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 数组的指针从不分段故障
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- vscode g++链路故障:体系结构x86_64的未定义符号
- 超载运算符== C 时获取SigSeGV(分割故障)
- 为什么在C 中调用模板超载运算符时,我会遇到细分故障
- 分段故障和过载运算符
- 堆栈类中的赋值运算符故障
- 使用运算符 new 后出现分段故障
- C++中的运算符过载故障
- 分段故障和运算符过载
- IF流运算符>> uint16_t设置故障位