2012-05-02 44 views
0
int number; 
     cout<<" Please select which item to change:"<<endl; 

     for(int i=0;i<=count;i++) 
     { 
      cout<<i<<" "<<v[i]->getName()<<endl; 
     } 


     cin>>i; 
     cout<<"Current number of items: "<<v[i]->getNumber()<<endl; 
     cout<<"Enter new value: "<<endl; 
     cin>>number; 

這是在一個開關的情況下,但程序當前在for循環之後終止。 有什麼想法?任何想法,爲什麼這可能會關閉該程序?

+1

'i <= count'看起來很可疑。如果'count'是'v'中元素的數量,它將訪問太多元素。 – hmjd

+1

程序?不可能! – 2012-05-02 13:44:37

回答

2
for(int i=0;i<=count;i++) 

真正應該使用:

for(int i=0;i<count;i++) 

如果有count元素。當您嘗試訪問v[ count ]時,您正試圖移動一個超過集合的末尾 - 一個經典的錯誤 - 並調用UB。

+0

改變了這個程序現在運行,直到選擇之後再次關閉程序 –

+0

它可能是同樣的問題。一旦退出循環,如果要訪問第num個元素,則需要傳遞「num-1」。在C,C++中,所有集合都從'0','1',...'n-1'索引爲'n'元素集合。所以,要獲得第四個元素,你應該使用'v [3] - > getNumber()'。 – dirkgently

相關問題