如何在数组指定索引位置插入元素?附错误代码求故障原因
代码无法正常运行的原因分析
- 数组越界访问
你定义的arr是长度为n=10的静态整型数组,合法下标范围为0~9。但循环初始值设置为i=n=10,循环内执行arr[i+1]=arr[i]操作,直接访问了arr[10]、arr[11]两个超出数组边界的内存地址,属于C++标准规定的未定义行为,运行时轻则输出异常数值,重则直接触发程序崩溃。 - 元素后移逻辑错误
数组指定索引插入元素的正确移位逻辑为:从当前数组最后一个有效元素的下标开始,从后往前将元素赋值给自身后一个位置,直到抵达插入索引位置。
这段代码的赋值逻辑完全颠倒,且移位起始位置错误:将越界的垃圾值arr[10]赋值给arr[11],向前循环的整个过程中没有将原有有效元素后移,最终插入位置后的原有元素会全部丢失,甚至被垃圾值覆盖。 - 缺少输入合法性校验
代码未对用户输入的插入索引user_val做范围校验,如果用户输入负数、或者大于等于当前有效元素个数的索引,程序会直接执行异常逻辑,输出错误结果。 - 输出逻辑适配性差
插入操作完成后数组的有效元素个数会比原数组多1,当前输出循环仅遍历0~n-1共10个元素,仅能适配本次n=10、原数组只有9个有效元素的场景,一旦数组长度或初始元素数量变化,就会出现少输出、多输出垃圾值的问题。
内容的提问来源于stack exchange,提问作者T.Y.M.SAI
相关产品推荐
相关产品推荐

