C++动态char数组调用topValue方法返回奇怪值问题求助
代码错误原因
- 数组越界访问
你申请的char数组长度为5,合法下标范围是0~4,但topValue方法中循环初始值设为了i = stackSize,你传入的stackSize是5,第一次循环就访问了stackArr[5],这是数组边界外的非法内存,读取到的是未定义的随机垃圾值,就是你遇到的²异常输出。 - 函数缺少默认返回值
如果数组内所有元素都是'\0',循环走完后函数没有返回任何值,同样会触发未定义行为。
修复方案
把循环初始值改为i = stackSize - 1,同时补充函数兜底返回值即可,修复后的topValue代码如下:
char topValue(char* stackArr, int stackSize) { // 起始下标改为stackSize-1,避免越界 for (int i = stackSize - 1; i >= 0; i--) { std::cout << "In top: " << stackArr[i] << std::endl; if (stackArr[i] != '\0') { return stackArr[i]; } } // 兜底返回,避免无返回值的未定义行为 return '\0'; }
修复后运行的返回结果就是你预期的最后一个非空字符l。
内容的提问来源于stack exchange,提问作者Ukrainis
相关产品推荐
相关产品推荐

