2013-04-13 77 views
1

我正在嘗試編寫一個程序來創建指向對象的指針矢量,然後對其進行解引用以打印它所保存的值。 但由於seg故障,程序正在中止。段錯誤in for循環遍歷指向對象的指針

分段故障位於display()函數的行cout << p1->rno << endl;處。

請幫我找出問題所在。

#include<iostream> 
#include<vector> 
using namespace std; 
class student 
{ 
    public: 
    int rno; 
    char name[25]; 
    student(int r,char *p):rno(r) 
    { 
    //cout << "Con No is" << ++cnt << endl; 
    strcpy(name,p); 
    } 
    static int cnt; 
}; 

void display(vector<student *> &vec) 
{ 
    vector<student *> :: iterator p; 
    student *p1; 
    for(p = vec.begin();p != vec.end();++p); 
    { 
     p1 = *p; 
     cout << p1->rno << endl; 
    } 
} 
int student :: cnt = 0; 

int main() 
{ 
    vector<student *> vec; 
    student *p; 
    int i = 0; 
    while(i < 10) 
    { 
     p = new student(i,"Ganesh"); 
     vec.push_back(p); 
     i++; 
    } 
    display(vec); 
    system("PAUSE 100"); 
    return 0; 
} 
+0

您是否嘗試過調試一下?任何想法看似失敗的部分? –

+0

聲明「cout << p1-> rno << endl」;正在導致故障。 – user1758616

+0

@ user175816這是相關信息 - 請編輯您的問題並添加此確切的詳細信息。 –

回答

6

你犯了一個錯字

for(p = vec.begin();p != vec.end();++p); 
//          ^

for循環具有空體。

P.S.我建議你打開警告,它可以幫助你避免這樣的錯別字。例如,鐺拋出以下警告:

警告:for循環具有空體[-Wempty體]

+0

是的,它正在工作。謝謝 – user1758616