运行时错误问题

时间:2013-04-23 02:49:12

标签: c++ arrays templates runtime-error

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

非常感谢!

2 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分: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;
}