2014-10-05 86 views
1

考慮下面的代碼:分割故障和操作符重載

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

+9

我想你的意思是'(* q)+ = 6;' – 2014-10-05 20:35:36

+0

非常感謝!這樣一個愚蠢的錯誤......我對C++很陌生,完全忽視了...... – Acctubi 2014-10-05 20:44:33

回答

4

q被聲明爲指針Queue

表達q += 6使用已聲明的操作符重載,它使用指針算術標準的運營商,並在指針地址結果被添加到。

for循環之後,q不再指向Queue對象,並且訪問它會導致分段錯誤。

要訪問對象q指向,您必須取消引用指針,例如, *q