【问题标题】:Segmentation fault and operator overloading分段错误和运算符重载
【发布时间】:2014-11-30 03:58:03
【问题描述】:

考虑以下代码:

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)+=6;
  • 非常感谢!如此愚蠢的错误……我对 C++ 有点陌生,完全无视这一点……

标签: c++ segmentation-fault operator-keyword


【解决方案1】:

q 被声明为指向Queue指针

表达式q += 6使用您声明的运算符重载,它使用标准运算符进行指针算术,并导致添加指针地址。

for 循环之后,q 不再指向Queue 对象,访问它会导致分段错误。

要访问q 指向的对象,您必须取消引用指针,例如*q.

【讨论】:

    猜你喜欢
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    相关资源
    最近更新 更多