2013-08-16 2 views
1

배열을 사용하여 두 개의 큰 양의 정수를 뺍니다. 하지만 아래의 코드를 실행할 때 g ++ (Ubuntu)에서 실행될 때 분할 오류 (코어 덤프)가 발생합니다.배열을 사용하여 큰 숫자를 뺍니다. C++

나는 Subtract numbers using arrays - C++Subtracting two long positive integers in an array c++을 따라 갔지만 이것들로부터 많은 도움을 얻을 수 없었다. 당신이 그 요소를 역 참조에 operator[]를 사용하기 전에

int main() { 
vector <int> N; 
vector <int> a; 
vector <int> y; 
char digit1; 
int l; 

do { 
    cin.get(digit1); 
    if (digit1 != (int) 
     '\n') 
     N.push_back(int(digit1) - int('0')); 
} while (digit1 != (int) 
    '\n'); 

char digit2; 
do { 
    cin.get(digit2); 
    if (digit2 != (int) 
     '\n') 
     a.push_back(int(digit2) - int('0')); 
} while (digit2 != (int) 
    '\n'); 

int i = N.size() - 1; 
int j = a.size() - 1; 
int k = 0; 
do { 
    if (j >= 0) { 
     if (N[i] < a[j]) { 
      y[k] = N[i] + 10 - a[j]; 
      l = i - 1; 
      while (N[l] == 0) { 
       N[l] = 9; 
       l--; 
      } 
      N[l] = N[l] - 1; 
     } else { 
      y[k] = N[i] - a[j]; 
     } 
     i--; 
     j--; 
     k++; 
    } else { 
     y[k] = N[i]; 
     i++; 
     k++; 
    } 
} while (i >= 0); 

for (int m = y.size() - 1; m >= 0; m--) { 
    cout << y[m]; 
} 
return 0; 
+1

오류가 발생한 행은 무엇입니까? 어딘가에서 메모리를 덮어 쓸 가능성이 가장 높습니다. – OldProgrammer

+0

숫자를 입력하고 Enter 키를 누르면이 오류가 발생합니다. – user1504383

+0

디버거로 코드를 단계별로 실행 했습니까? 무슨 라인이 오류를 일으키는 지 아십니까? – OldProgrammer

답변

1

귀하의 y 벡터는 공간이 할당되지 않습니다. 특히이 :

y[k] = N[i] - a[j]; 

는 확신 당신은 공간을 미리 할당, 또는 push_back()로합니다. 어느 쪽이든, 크기가 0 인 벡터의 0 인덱스조차도 역 참조하는 것은 좋지 않습니다.

vector<int> y(n,0); //n = max of N.size() & a.size()

else { 
    y[k] = N[i]; 
    i++; // Should be i-- 
    k++; 

} 
+0

그냥 보았습니다. 잘 잡으세요! – OldProgrammer

+0

그래, 그거야! 또한 else 문에 약간의 오류가 있었지만 i ++가 아닌 i ++가되어야합니다. – user1504383

0

벡터 공간을 할당?

또한 컴파일러 출력을 제공하십시오.

-1

y 당신이 vector을 포함했다

관련 문제