在这里得到了一些代码,这给了我一个我似乎无法修复的运行时错误。函数Length()计算点数组中所有点之间的累积距离。它使用了以前定义的功能Distance(),据我所知它可以完美工作。有指针吗?

这是我的函数源代码:

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;


非常感谢!

最佳答案

您正在读取超出数组末尾的元素。

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));
}

09-07 09:36