我在针对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;
}
答案 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()
表示,并在其上进行迭代做的。