我的代码中的分段错误(SIGSEGV)

时间:2011-02-13 15:00:22

标签: c++ segmentation-fault sigsegv

我在针对spoj和其他网站解决的许多问题中遇到了分段错误(SIGSEGV)。我给出了problm语句链接和代码。任何人都可以告诉我以下iv所犯的错误。 问题: 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 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

final的类型为std::string,不会以空值终止。

在你的for循环中:for(int j=0;final[j]!='\0';j++)你正在检查字符串的结尾,就像在C中那样(char* - null终止字符串),但是在C ++中你应该迭代以其他方式使用字符串字符:使用迭代器,计算字符串大小等。

快速解决此问题(不知道是否还有其他问题)是获取char*final的空终止final.c_str()表示,并在其上进行迭代做的。