2017-10-29 1 views
-2

두 개의 목록 l1, l2에 각각 데이터 [1,1,1] 및 [2,2,2]를 제공합니다.분할 오류 및 과부하 연산자

나는 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"으로 변경하면 작동 할 수 있습니다.

또 다른 문제점은 List to List &을 변경하려고 시도하는 것입니다. 주소가 다른 문제가 있습니다.

+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