C++ 分段错误和运算符重载
考虑以下代码:C++ 分段错误和运算符重载,c++,segmentation-fault,operator-keyword,C++,Segmentation Fault,Operator Keyword,考虑以下代码: 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;
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::append配合使用。无论如何,我编译了这段代码,+=操作符重载编译时没有错误。但是程序还是崩溃了
在调试时,似乎每当我在使用重载后使用队列对象q(例如析构函数)或其他函数(如Queue::append)时,就会出现分段错误
我不知道我做错了什么
显然,在本例中,重载包括输出和返回bool。q被声明为指向队列的指针
表达式q+=6不使用您声明的运算符重载,它使用指针算术的标准运算符,并将指针地址添加到
在for循环之后,q不再指向队列对象,访问它会导致分段错误
要访问q指向的对象,必须取消对指针的引用,例如*q。q被声明为指向队列的指针
表达式q+=6不使用您声明的运算符重载,它使用指针算术的标准运算符,并将指针地址添加到
在for循环之后,q不再指向队列对象,访问它会导致分段错误
要访问q指向的对象,必须取消对指针的引用,例如*q.我想你的意思是*q+=6;谢谢!这么愚蠢的错误…我对C++有一种新的看法,完全忽视了……我认为你是指*Q+=6;谢谢!这么愚蠢的错误……我对C++有点新,完全忽视了…