簡體   English   中英

代碼片段中的C ++分段錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM