作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
运行此代码
时出现段错误:http://ideone.com/yU80Bd
问题是当我在 GDB 中运行它时,代码运行良好且出色。为什么它在没有段错误的 gdb 中运行,但在其他地方运行却出现段错误?
最佳答案
问题是您输入的字符不在 [a-Z]
范围内。例如:!
这会导致在无效索引处访问 vector 。
您可以使用 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);
}
关于c++ - 使用 GDB 调试时段错误消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20496145/
我试图找到两个日期时间字段之间与预订系统的特定持续时间匹配的空闲时段,但我陷入了正确的查询。 我的数据库事件: +----------+---------------------+----------
我是一名优秀的程序员,十分优秀!