C++-映射迭代器访问导致segfault

C++ - Map iterator access results in segfault

本文关键字:segfault 访问 映射 迭代器 C++-      更新时间:2023-10-16

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

 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();                        
           };
};

添加路由后-我已经检查过了,它工作正常,我从我的试用中得到了一个segfault;到目前为止,错误位于it->first->getDeparture().getSupply()调用中。有什么解释吗?

我猜(99%肯定)您正面临悬挂指针的问题,即当您调用createSolution时,指向Route和Department对象的指针不再有效。

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