运行此code:
http://ideone.com/yU80Bd
问题是当我在GDB中运行它时,代码运行良好且非常好。为什么这在没有段错误的gdb中运行,而是在每个其他地方都运行了分段错误?
以下是我要解决的问题:http://www.codechef.com/DEC13/problems/CHODE
答案 0 :(得分:3)
问题是您的输入包含的字符不在[a-Z]
范围内。例如:!
这导致向量在无效索引处被加入。
您可以使用valgrind
检查运行程序的这些内容。
valgrind ./ideone < stdin
...
==2830== Invalid read of size 4
==2830== at 0x40111A: main (ideone.cpp:53)
...
==2830== Invalid write of size 4
==2830== at 0x401120: main (ideone.cpp:53)
问题在于以下几点:
for(int i=0;i<cipherText.size();++i)
{
char c = tolower(cipherText[i]);
++(cipherF[c-97].frequency);
}
c - 97
可能低于0.
您可以查看,例如:
for(int i=0;i<cipherText.size();++i)
{
char c = tolower(cipherText[i]);
if (c < 'a' || c > 'z') continue;
++(cipherF[c-97].frequency);
}