如何解决编译器警告C6386和C6385?

问题描述 投票:1回答:1

对于我正在编写的程序,我需要创建一个用户定义大小的数组,以及-15到15之间的随机值。因此,我将srand与动态数组转换一起使用。这是我下面的完整代码:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    //initialize variables
    double minValue;
    double maxValue;
    double firstQuartile;
    double thirdQuartile;
    double skewness;

    int size;
    std::cout << "Please enter the size of the data set: ";                 //get data set size from user
    std::cin >> size;
    int* dataSet = new int[size];                                                           
    cout << endl << "These are the randomly generated values: ";

    srand(static_cast<unsigned int>(time(NULL)));

    int i = size;
    for (int x = 0; x < i; x++)                                         //generate random numbers
    {
        dataSet[i] = (rand() % 31) - 15;
        cout << dataSet[i] << " ";
    }


} 

尽管它仍然可以编译,但我需要它来进行编译,而不会出现错误,而下面我突出显示的部分导致了两个错误,我不知道如何解决。

int i = size;
    for (int x = 0; x < i; x++)                                         //generate random numbers
    {
        dataSet[i] = (rand() % 31) - 15;
        cout << dataSet[i] << " ";
    }

C6386写入'dataSet'时缓冲区溢出:可写大小为'size * 4'字节,但可能会写入'i'字节。

AND

C6385从'dataSet'读取无效数据:可读大小为'size * 4'字节,但可以读取'i'字节。

c++ arrays random compiler-warnings srand
1个回答
3
投票

在此循环中,索引变量x不是i。

所以请像这样改变循环

int i = size;
for (int x = 0; x < i; x++)                                         //generate random numbers
{
    dataSet[x] = (rand() % 31) - 15;
    cout << dataSet[x] << " ";
}

实际上,变量i是多余的,并且容易产生代码错误。为什么不写

for (int i = 0; i < size; i++)                                         //generate random numbers
{
    dataSet[i] = (rand() % 31) - 15;
    cout << dataSet[i] << " ";
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.