2011-07-12 42 views
1
#include<list> 
#include<iostream> 

using namespace std; 

list<int> DL,TRS; 
list<int>::iterator gitr; 

void exchange(); 

int main() { 
    DL.push_back(10); 
    gitr=DL.begin(); 
    TRS.push_back(11); 
    TRS.push_back(12); 
    exchange(); 
    cout<<(*gitr)<<endl; 
} 

void exchange() { 
    list<int> tdl; 
    tdl=DL; 
    DL.clear(); 
    DL=TRS; 
    list<int>::iterator tmpitr=DL.begin(); 
    for(;tmpitr!=DL.end();++tmpitr) 
    cout<<(*tmpitr)<<endl; 
    DL.clear(); 
    DL=tdl; 
} 

這將輸出11而不是10.爲什麼?將全局迭代器重置爲列表

+3

你爲什麼期望輸出10? –

+0

在那裏,我重新格式化了您的代碼,但請記住,空格是您的朋友。 –

+0

但你在代碼後刪除了問題。 – crashmstr

回答

2

這個程序調用未定義的行爲,因此被允許做任何它想做 - 甚至在打印的11而不是10

爲什麼UB?因爲gitr被分配爲DL.begin(),然後(在函數exchange內)DL被清除,使得gitr爲無效的迭代器。解引用該迭代器是UB。