2013-03-02 2 views
1

두 번째 다항식을 추가하려고합니다. 첫 번째 행은 계수를 저장하고 두 번째 행은 차수를 저장합니다.두 개의 다항식을 더하기 위해 + 연산자를 오버로드합니다.

오버로드 + 함수를 만들었지 만 여기서 할당 된 메모리 배열을 사용하고 함수가 호출 될 때 충돌이 발생합니다.

** 업데이트 : + = 및 운영자를 복사하여 지금 실행하지만 결과는 내가 복사 생성자와 오버로드를 가지고

참고로 몇 가지 큰 음수입니다 = 연산자

// overload + 
Polynomial Polynomial::operator+(const Polynomial &right) 
{ 

    maxExp = right.maxExp; 
    poly = new int *[maxExp]; 
    for (int i=0; i < maxExp; i++) 
     *(poly + i) = new int[2]; 

    Polynomial temp = *this; 

    for (int i=0; i < maxExp; i++) 
    { 
     for (int j=0; j < 2; j++) 
     { 
      temp.poly[i][j] = poly[i][j] + right.poly[i][j]; 
     } 
    } 
    return temp; 
} 
+0

'delete poly []'해야 할 것은 무엇입니까? 그것은 제정신이 아닌 것처럼 보입니다. –

+1

왜'std :: vector'를 사용하지 않고 메모리 관리의 두통을 피할 수 있을까요? – NPE

+0

@ NPE 죄송합니다. 아직 벡터에 대해 알지 못해서 사용법을 모르겠습니다. – Casper

답변

0

여러 문제가 있지만 가장 눈부신 사람은 첫 번째 라인이다 :

delete [] poly; 

는 피가수 (x + y에서 x) 중 하나를 파괴한다. 또한 메모리 누수가 있지만이 시점에서 이것은 보조입니다.

편집 : 고객님의 질문 중 delete[]을 (를) 편집하셨습니다. 이렇게해도 문제는 해결되지 않지만 문제가 악화됩니다. 즉, 여전히 summand를 덮어 쓰고 있지만 더 많은 메모리가 누출됩니다.

+0

예, 실수였습니다. 과제를 위해 만들어진 것입니다. 그러나 그 라인이 없으면이 함수가 호출 될 때 프로그램이 계속 충돌합니다. – Casper

+0

@Herious : 음,'delete []'를 제거했지만 아직 summand를 덮어 쓰고 있습니다. – NPE

+0

고마워, 네가 요점을 보았고, 과제에서 그 줄을 지우고'=', 프로그램은 지금 실행되지만 결과는 추악한 음수이다. – Casper

2

단지 시작 그 + 연산자를 만들어라.

+0

미안하지만, + = – Casper

+0

으로 시작한다는 의미는 무엇입니까? [C++ 오버로드 지침] (http://courses.cms.caltech.edu/cs11/material/cpp /donnie/cpp-ops.html) –

관련 문제