2017-10-29 26 views
-2

データ[1,1,1]と[2,2,2]で2つのリストl1、l2をそれぞれ与えます。セグメンテーションフォールト&オーバーロード演算子

私はl1 + = 12を実行しますが、以下のプログラムを実行します。

しかし、それは*このリターンをやっている間、それは、セグメンテーションフォールトが表示されます:11

List List::operator+=(const List &other){ 
unsigned int min_len = (this->_len < other._len) ? _len : other._len; 
    for (int i = 0; i < min_len; i++){ 
     this->_Array[i] += other._Array[i]; 
    } 
    return *this; 
} 

私はそれがこのエラーを得た理由はわかりません。

ただし、「return * this」を「return 0」に変更しても動作します。

もう1つの問題はリストリストを&に変更しようとしていることです。別の問題が発生しています。

+1

あなたのオペレータの署名は、 '{'リスト&リスト::演算子+ =(constのリスト&その他)でなければなりません。セグメンテーションフォールトは、 'List'のコピーが作成されたときに表示される可能性が最も高いです。 – user0042

+1

あなたのプログラムのどこかにバグがあります。私のクリスタルボールは、「3つのルール」を検索すべきだと考えています。 – molbdnilo

+0

私たちには[mcve]がありますか? – user4581301

答えて

-1

あなたは値でリストを返すので、このようなあなたのメソッドを宣言します。

List& List::operator+=(const List &other)

+0

'List'を値で返すことは理想的には間違っていますが、ヘルプなしではエラーにはなりません。この質問のコメントに指摘されているように、これは[3つのルールを正しく観察していない](https://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)しかし、他の多くの問題によって引き起こされる可能性があります。 Askerがより多くのコードを提供しない限り、この質問には明確に答えられません。 – user4581301

関連する問題