2011-02-13 8 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はNULL終端されていないタイプstd::string、です。

forループで:for(int j=0;final[j]!='\0';j++)あなたはC言語(char* - null終了文字列)で行うように文字列の終わりをチェックしていますが、C++では他の方法で文字列を繰り返し処理する必要があります:イテレータを使用して、文字列のサイズなどを数えます。

この問題(他のものがあるかどうかわからない)は、char*という表現がfinalのヌルで終了していることを確認することです。

+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; 
関連する問題