我在 Eclipse 中测试了我的代码,一切正常——我现在从终端运行项目并不断收到分段错误。我已将问题缩小到这一部分:
[此代码使用节点指针向量构造距离矩阵。]
for(unsigned int j=0;j<numPts;j++) {
for(unsigned int k=j+1;k<numPts;k++) {
Node* a = points[j];
Node* b = points[k];
double xd = a->GetX()- b->GetX();
double yd = a->GetY() - b->GetY();
unsigned int dab = int(round(sqrt(xd*xd + yd*yd)));
(*distances)[(int)j][(int)k] = dab;
(*distances)[(int)k][(int)j] = dab;
}
}
如何修复这段代码,以免出现任何分段错误?
[编辑] - 它崩溃的那条线就是那条double xd = a->GetX() - b->GetX();
线。
[编辑 2] - 这就是我创建矢量的方式:
std::vector<Node*> myVec;
Node* p1 = new Node(xval, yval);
myVec.push_back(p1);
[编辑 3] - 这就是我实现节点的方式:
#include <utility>
class Node : public std::pair<double, double>
{
public:
Node(double x, double y) : std::pair<double, double>(x,y)
{}
double GetY() const {return second;}
double GetX() const {return first;}
};
所以我发现了问题...... myVec[0] 的指针不是NULL,但它在某种程度上被破坏了。我在向量的开头“插入”了一个元素,这导致了所有错误:
std::vector<Node*>::iterator it;
it = myVec.begin();
myVec.insert(it, newNodePtr);
一旦我删除它,一切正常。