C++生成随机数一维数组后无法正常打印该如何解决?
C++随机数组生成代码修复方案
现有代码错误点
- 两处for循环的判断条件写反:你使用了
i > n的判断逻辑,初始值为0的i永远不可能大于输入的正整数n,循环体完全不会执行,自然无法生成和打印数组内容 create函数声明了返回int*类型,但函数末尾没有执行return arr;语句,导致main函数拿到的数组指针是非法野指针,即使循环正常执行也会触发内存访问错误- 未初始化随机数种子,后续每次运行程序生成的随机数组内容都会完全相同(可选优化项)
修正后完整代码
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int *create(int n) { int *arr = new int [n]; // 循环条件修改为i < n for (int i = 0; i < n; i++) { arr[i] = rand() % 100; } // 补全返回值 return arr; } int main () { // 初始化随机数种子,保证每次运行生成的随机数不同 srand((unsigned int)time(NULL)); int n = 12; int *arr = create(n); cout << "this is the array: "; // 循环条件修改为i < n,移除多余分号 for (int i = 0; i < n; i++) { cout << arr[i] << " "; } delete[] arr; return 0; }
核心改动说明
- 补全了
<cstdlib>、<ctime>头文件引用,适配随机数相关函数的调用要求 - 将两处循环判断条件修改为
i < n,保证循环能执行n次,完成数组赋值和打印逻辑 - 在
create函数末尾添加return arr;,正常返回申请到的堆内存数组首地址 - 新增随机数种子初始化语句,避免每次运行生成的随机数组完全重复
- 移除了main函数中for循环末尾多余的无效分号
内容的提问来源于stack exchange,提问作者Fatima Syed
相关产品推荐
相关产品推荐

