在指向对象的指针向量上的for循环中的段错误

Segfault in a for loop over a vector of pointer to objects

本文关键字:段错误 错误 循环 对象 指针 向量 for      更新时间:2023-10-16

我正试图编写一个程序来创建一个指向对象的指针向量,然后对其解引用以打印它所持有的值。但是程序由于段错误而中止。

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;
}

你打错字了

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

你的for循环有空体。

注:我建议你打开警告,它可以帮助你避免这样的打字错误。例如,clang抛出以下警告:

警告:for循环有空体[-Wempty-body]