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