2013-11-02 6 views
0
{ 
    // 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 
} 

Это первый раз, когда я когда-либо прибегал к одному из этих сайтов, но я работал около часа, чтобы исправить это. Он работает полностью плавно, пока не отобразит третье значение в 3-м массиве. Это всегда дает мне странное число.Проблемы с моими динамическими массивами

+1

Вы назначаете массивы с пробелом для 0 элементов. Подождите, пока вы не получите размеры, чтобы выделить их. –

ответ

4

Проблема заключается в том, что переменные, используемые для размера устанавливаются 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]; 
1

Когда вы говорите new Foo[NumItems], что массив будет только когда-либо NumItems предметы, это обыкновение расти сама по себе. Если вы захотите впоследствии изменить размер, вам нужно будет выделить новый массив нужного размера и скопировать элементы. Иногда вы можете уйти с продлением текущего распределения с помощью realloc.

Ваш вопрос два раза:

  • Вы инициализация массива с размером 0, что не имеет смысл. Как только вы узнаете, сколько элементов вам нужно, выделите массив с этим номером.
  • Вы предполагаете, что массив будет расти сам по себе при добавлении элементов.

Для второго случая вы должны просто использовать std::vector, который будет расти автоматически и избавит вас от неприятностей.

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

В текущем случае, вы можете просто отложить создание массива, пока вы не знаете, общее количество элементов, которые необходимо хранить в нем.

Смежные вопросы