2014-03-28 68 views
-1

我有一組Tuple類型。元組包含一個字符串向量。當我輸出大小進行調試時,輸出大小爲4,這是正確的,但是當我嘗試關閉第一個元素時,我會遇到瘋狂的東西(內存)。爲什麼它不返回字符串?迭代器返回大小> 0但不會輸出元素

cout<<"temp size:"<<temp.getTuples().size()<<" r size:"<<r.getTuples().size()<<endl; 
    set<Tuple>::iterator it=temp.getTuples().begin(); 
    t=*it; 
    cout<<t.getTuple().size()<<" "<<t.getTuple()[0]<<endl; 
    for(set<Tuple>::iterator it=temp.getTuples().begin();it!=temp.getTuples().end();++it) 
    { 
     for(set<Tuple>::iterator jt=r.getTuples().begin();jt!=r.getTuples().end();++jt) 
     { 
      t=*it; 
      a=t.getTuple(); 
      e=*jt; 
      b=e.getTuple(); 
      vector<string> ab; 
      cout<<"a size:"<<t.getTuple().size()<<" b size:"<<e.getTuple().size()<<endl; 
      cout<<"a size:"<<a.size()<<" b size:"<<b.size()<<endl; 

Code and output

對不起有不少COUTS進行調試。 Temp是在控制檯中首先打印出來的一組元組(3),r是第二個打印出來的一組元組(5)。打印出來的4是參照集合中的元組(矢量)的大小並且是正確的。輸出應該打印'12345'。任何幫助,爲什麼它的打印內存位置將不勝感激。

回答

1

我猜想getTuples()函數返回一個按值設置。所以,你的迭代it由點到這裏的臨時對象的元素:

set<Tuple>::iterator it=temp.getTuples().begin(); 

德引用it是不確定的行爲。您必須確保您複製getTuples()返回的內容,或修改它以返回參考。