C ++ - 在segfault中映射迭代器访问结果

时间:2012-04-06 19:41:07

标签: c++ iterator segmentation-fault

我试图完全重新提出这个问题。情况如下:

 class Departure {
    private :
      unsigned int supply;

    public : 
     Departure(int);
     ~Departure();
     int getSupply()  {
       return supply;
     };
};


class Route {
    private :
       Departure* departure;
    public :
       Departure& getDeparture() { 
          return *departure;
        };
};

class Plan {
    private :      
       std::map<Route*, double> quantities;
    public :
       void addRoute(Route& rt)  {
          quantities.insert(std::pair<Route*,double>(&rt,0));
        };

       void createSolution() {  
          std::map<Route*, double>::iterator it;    
          for(it = quantities.begin(); it != quantities.end(); ++it) {      
             it->second = it->first->getDeparture().getSupply();                        
           };
};

添加路线后 - 我已经检查过,它运行正常,我从我的试用版中获得了一个段错误到目前为止的错误位于it->first->getDeparture().getSupply()电话中。有什么解释吗?

1 个答案:

答案 0 :(得分:1)

我猜想(99%肯定)你正面临悬挂指针的问题,也就是说,当你调用createSolution时,指向Route和Departure对象的指针不再有效。

简单的解决方法是不使用指针,而是将Route和Departure对象存储为值。无论如何,将它们存储为指针并没有多大好处,因为对象太小了......