[英]C++ Segmentation Fault in code fragment
我在Eclipse中測試了我的代碼,並且一切正常-我現在從終端運行項目,並不斷出現Segmentation Fault。 我已將問題縮小到此部分:
[此代碼使用Node指針的向量構造距離矩陣。]
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);
一旦我刪除了,一切正常。
如果確實是該區域的原因,請檢查:
Node* a = points[j];
Node* b = points[k];
在嘗試取消引用之前為NULL
或錯誤的指針值,
另外,請確保distances
為Non-NULL,並且在第二次分配中也是有效的指針,並且j和k作為二維偏移量指向實際distances
緩沖區,並且不超出該范圍(請確保numPts
確實是您要使用的含義)作為您的緩沖區端點。)
如果你不能if
他們的話,至少assert
他們。
從您的編輯
我的文章的第一部分適用- a
和/或b
是幾乎肯定不好或NULL
指針,這是造成你的崩潰。 查看如何為該陣列/容器/分配內存,無論它是什么,或者檢查它是否存在內存損壞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.