C++中数组未初始化部分输出随机数值问题求助
问题原因解答
1. 索引2之后输出随机值的原因
- C++对于栈区局部数组,如果仅对部分元素显式赋值,剩余未赋值的元素不会被自动初始化为0或任何“空值”,会保留对应内存地址中残留的历史脏数据,所以你会看到大量无规律的随机数值。
- 如果你需要数组所有元素默认初始化为0,定义时可写为
int s[10] = {0};,此时所有未显式赋值的元素都会被自动置0。
2. 循环未按预期终止的原因
- 该问题几乎都是循环终止条件写错导致的:你大概率没有用数组长度作为循环终止边界,而是用了类似
s[i] != 0的判断作为终止条件。由于未初始化的元素是随机脏数据,几乎不会恰好遇到0值,循环会一直执行,甚至会越界访问数组边界之外的内存空间,输出更多随机值,严重时会触发段错误导致程序崩溃。 - 固定长度数组的标准遍历写法参考:
#include <iostream> using namespace std; int main() { int s[10] = {0}; // 全量初始化为0 s[0] = 0; s[1] = 1; s[2] = 2; // 用数组长度作为循环边界,避免硬编码和越界 for(int i = 0; i < sizeof(s)/sizeof(s[0]); i++) { cout << s[i]; } return 0; }
内容的提问来源于stack exchange,提问作者24lights
相关产品推荐
相关产品推荐

