2013-04-23 4 views
0

Получил немного кода здесь, который дает мне ошибку времени выполнения, которую я не могу исправить. Функция Length() вычисляет кумулятивное расстояние между всеми точками в массиве точек. Он использует ранее определенную функцию Distance(), которую я знаю, работает отлично. Любые указатели?Проблемы с ошибкой Runtime

Вот мой исходный код функции:

template<typename Point>    //Length function 
double PointArray<Point>::Length() const 
{ 
    double total_length = 0; 
    for (int i=0; i<Size(); i++) 
    { 
     total_length += (GetElement(i)).Distance(GetElement(i+1)); 
    } 
    return total_length; 
} 

А вот моя реализация:

cout<<"The Length of the Point Array is: "<<(*ptArray1).Length()<<endl; 

Большое спасибо!

ответ

3

Вы читаете элементы, находящиеся за пределами массива.

for (int i=0; i<Size(); i++) 
{ 
    total_length += (GetElement(i)).Distance(GetElement(i+1)); 
                 //^^^ 
} 

Один вы дойдете до конца for петли вы читали последний элемент, а затем вычислить расстояние от следующего элемента - который находится вне границ массива. Ваш for цикл должен выглядеть примерно так:

for (int i=0; i<Size() - 1; i++) 
{ 
    total_length += (GetElement(i)).Distance(GetElement(i+1)); 
} 
+0

Wow. Никогда бы не подумал об этом. Очень признателен! – Byron

2

Попробуйте это:

template<typename Point>    //Length function 
double PointArray<Point>::Length() const 
{ 
    double total_length = 0; 
    for (int i=0; i<Size()-1; i++) 
    {    //^^^ otherwise, i+1 will be out of range 
     total_length += (GetElement(i)).Distance(GetElement(i+1)); 
    } 
    return total_length; 
} 
+0

+1! Наконец, добрался до тебя. –

+0

@CaptainObvlious Вы смешны. но спасибо! – taocp

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