2011-02-13 5 views
1

님이 spoj 및 다른 웹 사이트에서 해결 한 많은 문제에 대해 세그먼트 오류 (SIGSEGV)를 받고 있습니다. Problm 성명서 링크와 코드를 제공합니다. 아무도 내게 아래에서 수행 한 실수를 말할 수 있습니까? 문제 : http://goo.gl/CVROl내 코드의 세그먼트 오류 (SIGSEGV)가

미리 감사드립니다.

#include<iostream> 
#include<cstdio> 
#include<cstring> 
#include<cmath> 

using namespace std; 

int main() 
{ 
    char a; 
    string final,dummy; 
    int t,h,p,k,z; 
    scanf("%d",&t); 
    while(t) 
    { 
     cin>>a>>h>>p; 
     final=a; 
     for(int i=0;i<h;i++) 
     { 
       k=0; 
       for(int j=0;final[j]!='\0';j++) 
       { 
        if(final[j]=='a') 
        { 
         dummy[k]='a'; 
         dummy[k+1]='b'; 
         k+=2; 
        } 
        else 
        { 
         dummy[k]='b'; 
         dummy[k+1]='a'; 
         k+=2; 
        } 
       } 
       final=dummy; 
      } 
      printf("%c\n",final[p-1]); 
      t--; 
     } 
     return 0; 
    } 
+0

'더미'에 할당 된 메모리가없는 것 같습니다. – sstn

+0

커피가 필요합니다. ( – gr0v3r

답변

0

final 널 종료되지 형 std::string,이다.

for 루프 : for(int j=0;final[j]!='\0';j++) C에서 수행하는 것처럼 (char* - null로 끝나는 문자열) 문자열의 끝을 확인하지만 C++에서는 다른 방법으로 문자열 문자를 반복해야합니다 : iterator를 사용하여 문자열 크기 등을 세는 것. 당신이하고있는 것처럼 그 위에 iterater을 final.c_str()과 :

(다른 사람이 있는지 모르겠다)이 문제에 대한 빠른 퀵는 널 (null)이 finalchar* 표현을 종료 얻을 수 있습니다.

+0

또는 for (int j = 0; j gr0v3r

2

sstn이 지적했듯이 더미 메모리를 할당하지 않았습니다. 문자열이기 때문에 문자를 추가하려는 것처럼 보일 수 있습니다.

for(int j=0;j < final.size();j++) 
{ 
    if(final[j]=='a') 
    { 
     dummy.push_back('a'); 
     dummy.push_back('b'); 
    } 
    else 
    { 
     dummy.push_back('b'); 
     dummy.push_back('a'); 

    } 
} 
final=dummy;