1

私は質問を完全に再定式化しようとしました。状況は次のとおりです。

 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()。理由はありますか?

4

1 に答える 1

1

ぶら下がっているポインターの問題に直面していると思います (99% 確実)。

これを簡単に修正するには、ポインターを使用せずに、Route オブジェクトと Departure オブジェクトを値として格納します。とにかく、オブジェクトが非常に小さいことを考えると、それらをポインターとして保存することにはあまり利点がありません...

于 2012-04-06T21:34:57.653 に答える