2012-09-08 3 views
2

을 내가 가지고있는 다음 코드와 내가 컴파일 갔을 때, 나는 다음있어 메시지exceptionAbort 트랩 던지는라고 종료 : 6

종료 exceptionAbort 트랩 던지는라고 : 내가 찾았 6

을 이 오류 메시지는 이해할 수 없었습니다. 이 오류 메시지의 의미와 코드 수정 방법을 알려주십시오. 여기 코드입니다 :

#include <iostream> 
#include <string> 
using namespace std; 

int main(){ 
    int n,r; 
    while(cin>>n>>r){ 
     if(n==0&&r==0)break; 
     string s; 
     for(int i=0;i<n;i++) 
      s[i]='i'; 

     for(int i=0;i<r;i++){ 
      int p,c; 
      cin>>p>>c; 
      string left=s.substr(p-1,p+c-1); 
      string right=s.substr(0,p-2)+s.substr(p+c, (int)s.size()); 
      s=left+right; 
     } 
     cout << (int)(s[0]-'0')+1 << endl; 
    } 
     return 0; 
} 

하는 g 컴파일 ++, 맥 OSX에서 예외가 어디에서 오는지 10.7.4이

+1

지금이다 :

방금 ​​'i'의 많은 문자열을 원하는 경우에, 당신이 그것을 구성 할 때 그렇게 할 수

string s; for(int i=0;i<n;i++) s.push_back('i'); 

을 시도, 루프에서 문자열에 문자를 추가하려면 디버거를 사용하는 방법을 배울 수있는 좋은 시간입니다. 디버거에서 프로그램을 실행하면 충돌의 위치를 ​​알려주고 변수의 원인을 파악하는 데 도움이되는 변수를 검사 할 수 있습니다. 위치를 찾는 것과 관련하여 호출 스택을 검사하여 코드에서 발생한 위치를 찾아야 할 수도 있습니다. –

답변

2

모르지만 이것은 단지

string s; 
for(int i=0;i<n;i++) 
    s[i]='i'; 
작동하지 않습니다

문자열이 처음에 비어 있고 모두 s[i]이 범위를 벗어날 수 있기 때문입니다.

string s(n, 'i'); 
+0

문자열 s; for (int i = 0; i solti