2012-03-22 50 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