HackerRank平台C++代码段错误:访问letters数组触发程序崩溃排查
问题根因
代码存在数组越界访问问题,是运行报错的直接原因:
letters数组共初始化10个元素,有效下标范围为0~9,下标大于等于10时访问属于非法内存访问,会触发运行错误。- 代码中
spaces变量逻辑完全冗余,计算下来永远满足spaces == n的条件:spaces初始值为a-1- 循环中
n从a开始每次递增1,每次循环spaces也同步加1,二者数值永远相等
- 当输入的
b大于9时,n会遍历到10及以上的数值,此时满足spaces ==n的判断,会执行cout << letters[n] << "\n";访问不存在的数组元素,触发报错。 - 换成固定下标2或者打印固定字符串不会触发越界,因此运行正常。
修复方案
删除冗余的spaces变量,将判断条件改为判断n是否小于等于9即可,修复后代码如下:
int main() { int a; int b; string letters[] = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; cin >> a >> b; for (int n = a; n <= b; n++) { if (n <= 9) { cout << letters[n] << "\n"; } else if (n%2 == 0) { cout << "even\n"; } else { cout << "odd\n"; } } return 0; }
内容的提问来源于stack exchange,提问作者Lelouch
相关产品推荐
相关产品推荐

