2009-12-10 4 views
0
#include <iostream> 
using namespace std; 

int main() 
{ 
int size = 0; 
int* myArray = new int [size + 1]; 
cout << "Enter the exponent of the first term: "; 
cin >> size; 
cout << endl; 
for (int i = size; i >= 0; --i) 
{ 
    cout << "Enter the coefficient of the term with exponent " 
    << i << ": "; 
    cin >> myArray[i]; 
} 
for (int i = size; i >= 0; --i) 
{ 
    cout << i << endl; 
} 
return 0; 
} 

Почему я получаю ошибку утверждения при вводе более 2? Это предшественник полиномиальной программы, где индекс массива является степенью каждого члена, а элемент в массиве [индекс] - коэффициент.Почему я получаю ошибку утверждения?

+0

Что в мире этот код пытается сделать? Вы инициализируете myArray как массив с только 1 int в нем, затем читаете размер и пытаетесь записать это произвольное местоположение в массиве? –

+0

Спасибо всем! Первоначально я только что получил ошибку компиляции и инициализировал размер до 0, не думая очистить ошибку. Но это создало ошибку во время выполнения. Я исправил его, не инициализируя размер и выделяя myArray после ввода размера. Еще раз спасибо ребятам! – Brandon

+1

@Brandon: Еще одна вещь: цикл for начинается с 'int i = size;', что будет недопустимым индексом. Он должен начинаться с 'size-1' – Naveen

ответ

3

Ваш массив выделяется как int [1]. Должно быть выделено после, которое вы читаете в размере.

1

Вы инициализируете свой массив при размере = 0, задавая размер массива 1 . Вы получаете свою ошибку утверждения, когда вы выходите за пределы границ массива (1).

0

myArray всегда имеет размер 0 + 1 = 1. i начинается с того, что вводит пользователь, и первый доступ к массиву, который вы делаете, - myArray [i]. Итак, скажем, пользовательские входы 5, ваш массив имеет размер 1, и вы получаете доступ к myArray [5]. Это провалится!

Я бы выделил массив ПОСЛЕ ввода размера ввода.