0

这里有一些代码,这给了我一个似乎无法修复的运行时错误。函数 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;

非常感谢!

4

2 回答 2

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));
}
于 2013-04-23T02:50:45.517 回答
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;
}
于 2013-04-23T02:52:04.947 回答