代码片段中的C ++分段错误

时间:2013-07-17 20:16:20

标签: c++ segmentation-fault

我在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;
      }
}

如何修复此段代码,以免出现任何Segmentation错误?

[编辑] - 崩溃的行是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);

一旦我删除了,一切正常。

1 个答案:

答案 0 :(得分:0)

如果该区域确实是故障的原因,请检查:

Node* a = points[j];
Node* b = points[k];
在尝试取消引用它们之前,

表示NULL或错误的指针值,

另外,确保distances为非NULL,并且在第二个赋值中也是一个有效指针,j和k作为二维偏移量指向实际的distances缓冲区而不是它(确保numPts确实是您用作缓冲区端点的意思。)

如果你不能if他们,那么至少assert他们。

来自您的修改

我的帖子的第一部分适用 - a和/或b几乎肯定是坏的或NULL指针,这会导致您的崩溃。了解如何为该阵列/容器/内容分配内存或检查内存是否存在损坏。