我的动态数组有问题

Trouble with my dynamic arrays

本文关键字:有问题 数组 动态 我的      更新时间:2023-10-16
{
    // FIRST ARRAY
    int NumberOfXValues;
    double* FirstArray;
    NumberOfXValues = 0;
    FirstArray = new double[NumberOfXValues];
    // END FIRST ARRAY
    // SECOND ARRAY
    int NumberOfProbabilities;
    double* SecondArray;
    NumberOfProbabilities = 0;
    SecondArray = new double[NumberOfProbabilities];
    // END SECOND ARRAY
    // THIRD ARRAY
    int Product;
    double* ThirdArray;
    Product = 0;
    ThirdArray = new double[Product];
    // END THIRD ARRAY
    // OBTAINING THE NUMBER OF X VALUES
    cout << "Please input the number of "x" values we will be using: ";
    cin >> NumberOfXValues;
    // END OF OBTAINING THE NUMBER OF X VALUES
    // OBTAINING THE VALUES IN THE FIRST ARRAY
    int x;
    cout << "Please input the "x" values in order from least to greatest: " << endl;
    cout << endl;
    for (int x = 0; x < NumberOfXValues; x++)
    {
        cout << "Enter number: ";
        cin >> FirstArray[x]; 
    }
    cout << endl;
    // END OF OBTAINING THE VALUES IN THE FIRST ARRAY
    // OBTAINING THE VALUES IN THE SECOND ARRAY
    cout << "Please input the probabilities corresponding to their "x" values: " << endl;
    cout << endl;
    for (int x = 0; x < NumberOfXValues; x++)
    {
        cout << "Enter probability in decimal form: ";
        cin >> SecondArray[x];
    }
    cout << endl;
    // END OF OBTAINING THE VALUES IN THE SECOND ARRAY
    // MULTIPLYING THE FIRST TWO ARRAYS TO OBTAIN THE THIRD
    for (int x = 0; x < NumberOfXValues; x++)
    {
        ThirdArray[x] = FirstArray[x] * SecondArray[x];
    }
    // END OF MULTIPLYING THE FIRST TWO ARRAYS TO OBTAIN THE THIRD
    //TEST
    for (int x = 0; x < NumberOfXValues; x++)
    {
        cout << ThirdArray[x];
        cout << endl;
    }
    //TEST
}

这是我第一次求助于这些网站之一,但我花了将近一个多小时来解决这个问题。它运行完全平稳,直到显示第三个数组中的第三个值。它总是给我一个奇怪的数字。

问题是用于

大小的变量在创建数组时设置为 0

int NumberOfXValues;
double* FirstArray;
NumberOfXValues = 0;
FirstArray = new double[NumberOfXValues];

这里FirstArray 0,因此它将创建一个0元素数组。

您必须在获得元素数量后创建数组。

cout << "Please input the number of "x" values we will be using: ";
cin >> NumberOfXValues;
FirstArray = new double[NumberOfXValues];

当你说new Foo[NumItems]时,该数组将只有NumItems个项目,它不会自行增长。如果以后要调整其大小,则需要分配一个大小合适的新数组并复制成员。有时,您可以使用realloc延长当前的分配。

您的问题是双重的:

  • 您正在初始化大小为 0 的数组,这毫无意义。知道需要多少项后,使用该数字分配数组。
  • 假设数组将在您添加项目时自行增长。

对于第二种情况,您实际上应该只使用会自动增长并为您省去麻烦的std::vector

std::vector<double> firstArray(initialSize);
firstArray.push_back(firstItem);
firstArray.push_back(secondItem);
//...

在当前的情况下,您可以推迟数组的创建,直到知道需要在其中存储的项目总数。