2012-03-22 49 views
1

我目前工作的一個模擬器和遇到的調試運行時出現以下錯誤:表達式:矢量不兼容的迭代器調試斷言失敗:無效的迭代器

的代碼如下:

class Network { 
    private: 
      vector<Node*> nodes; 
      .... 
      void parse_config(void); 
      .... 
    }; 

而在parse_config方法我有一個產生錯誤的序列。這是它:

if(nodes.empty()) // add the first node to the network 
     { 
      Node current(regex_d[1]); // create current(first src) node 
      Node *acurrent = &current; 

      Node next_hop(regex_d[2]); // create the node we immediately send to 
      Node *anext_hop = &next_hop; 

      acurrent->add_next_hop(anext_hop); 

      acurrent->add_n_vchannels(regex_d[5]); 

      nodes.push_back(acurrent); // <== error 
      nodes.push_back(anext_hop); // <== here as well 
     } 

有沒有解決方法呢? 任何幫助/建議/參考將非常感激。

塞比

+0

您在'push_back'本身或您嘗試使用這些指針期間出現錯誤? – Naveen 2012-03-22 17:31:35

回答

1

你的指針指向堆棧對象。雖然這在代碼中並不明顯,但很可能您的節點向量中有一些指針已被回收。在上面:

Node * acurrent = new Node(regex_d [1]);

會使至少內存問題更加準確。

至於你遇到的問題,可能是內存位置被用於別的東西,導致你的指針指向一個完全不同的對象而不是節點。

+0

謝謝。基本上當方法返回時,堆棧被清除,從而使得當前指針無效。 – Sebi 2012-03-22 17:39:36

+0

正當我push_back指針否則沒有。 – Sebi 2012-03-22 18:18:40