コードを 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);
それを削除すると、すべてが機能しました。