如何在不使用vector的情况下动态创建并填充指定大小的随机数数组?
不用vector实现动态大小随机数组的方案
先指出你现有代码的几个关键问题:
- 第一段代码里未定义数组
A,且循环条件i < size + 1会导致数组越界(数组合法下标范围是0到size-1);另外srand(time(0))放在循环内会每次重置随机种子,导致生成的所有随机数完全相同。 - 第二段函数里的
int A[n]是C99的变长数组特性,不属于C++标准规范,而且返回局部数组的地址完全无效——局部变量在函数执行结束后会被销毁,返回的指针会变成野指针。
正确实现方式:动态内存分配
在不使用vector的前提下,必须通过动态内存分配创建大小由用户输入决定的数组。C++环境用new[]/delete[],C环境用malloc/free,以下是具体实现:
C++ 版本
#include <iostream> #include <cstdlib> #include <ctime> // 生成指定大小的随机数数组,返回数组指针 int* generateRandArray(int size) { // 动态分配内存 int* arr = new int[size]; for (int i = 0; i < size; ++i) { // 生成0到size-1之间的随机数 arr[i] = rand() % size; } return arr; } int main() { int size; std::cout << "What is the array size? "; std::cin >> size; // 随机种子只初始化一次,放在程序开头 srand(time(0)); int* A = generateRandArray(size); // 示例:打印数组前5个元素 std::cout << "First 5 elements: "; for (int i = 0; i < std::min(5, size); ++i) { std::cout << A[i] << " "; } std::cout << std::endl; // 必须释放动态分配的内存,避免内存泄漏 delete[] A; return 0; }
C 版本
#include <stdio.h> #include <stdlib.h> #include <time.h> int* generateRandArray(int size) { int* arr = (int*)malloc(size * sizeof(int)); if (arr == NULL) { // 检查内存分配是否成功 printf("Memory allocation failed!\n"); exit(1); } for (int i = 0; i < size; ++i) { arr[i] = rand() % size; } return arr; } int main() { int size; printf("What is the array size? "); scanf("%d", &size); srand(time(0)); int* A = generateRandArray(size); // 示例:打印数组前5个元素 printf("First 5 elements: "); for (int i = 0; i < (size < 5 ? size : 5); ++i) { printf("%d ", A[i]); } printf("\n"); free(A); // 释放内存 return 0; }
关键注意事项
- 随机种子初始化:
srand(time(0))只需要调用一次,放在程序启动阶段即可,多次调用会导致随机数重复。 - 内存释放:动态分配的数组必须在使用完毕后用
delete[](C++)或free(C)释放,否则会造成内存泄漏。 - 越界检查:遍历数组时,下标必须控制在
0到size-1范围内,禁止越界访问。
内容的提问来源于stack exchange,提问作者Clinton Zimmerman
相关产品推荐
相关产品推荐

