Ошибка сегментации (SIGSEGV) в моем коде - PullRequest
1 голос
/ 13 февраля 2011

Я получаю ошибку сегментации (SIGSEGV) за многие проблемы, которые я решил на спой и других сайтах. Я даю ссылку и код заявления о проблеме. Может кто-нибудь сказать мне ошибки, которые я сделал ниже. Проблема: http://goo.gl/CVROl

Заранее спасибо.

 #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;
  }

Ответы [ 2 ]

2 голосов
/ 13 февраля 2011

Как указал 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;
0 голосов
/ 13 февраля 2011

final имеет тип std::string, которые не имеют нулевого завершения.

В вашем цикле for: for(int j=0;final[j]!='\0';j++) вы проверяете конец строки, как если бы вы делали это в C (который является char* - строкой с нулевым окончанием), но в C ++ вам следует перебирать строчные символы некоторые другие способы: использование итератора, подсчет размера строки или что-то в этом роде.

Быстрое решение этой проблемы (не знаю, есть ли другие) состоит в том, чтобы получить char* представление final: final.c_str() с нулевым символом в конце и повторить его, как вы делаете.

...