在打印出动态分配的数组中的前两个数字时遇到问题,其他数字工作正常

Having trouble printing out the first two numbers in a dynamically allocated array, the other numbers work fine

本文关键字:数字 问题 遇到 其他 工作 两个 数组 动态分配 打印      更新时间:2023-10-16
#include <iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int* randomNumbers(int min, int max, int size);
int main()
{
    int min = 20;
    int max = 100;
    int size = 10;
    int* nums; 
    nums = randomNumbers(min,max,size); 
    cout << "***************"<<endl;
    for(int i = 0; i < size;i++)
    {
        cout << *(nums+i) << endl; 
    }

    return 0;
}

int* randomNumbers(int min, int max, int size)
{
    int* random = new int[size]; 
    unsigned seed = time(0); //time elapsed since Jan 1, 1970
    srand(seed);
    for (int i = 0;i<size;i++)
    {
        *(random+i) = rand() % ((max+1)-min) + min;
        cout<<*(random+i)<<" ";
    }
     cout<<endl;
    delete[] random; 
    return random;
}

因此,如果我在 Xcode(Macbook( 中运行此代码,它可以完美运行,但是如果我在 Codeblocks(Windows( 中运行它,从 main 函数打印的前两个数字是百万,但从 randomNumbers(( 打印的前两个数字在预期范围内。我不明白为什么在 main 函数中打印数字会更改前两个值?其余的都很好。我真的口齿不清,请随时就我的问题提问。

   delete[] random; 
   return random;

您正在删除阵列!

删除数组后对阵列的任何访问都是未定义的。 完成后清理阵列。

将删除移至此处:

 for(int i = 0; i < size;i++)
 {
     cout << *(nums+i) << endl; 
 }
 delete[] nums;
 return 0;