push_back()时出现分段错误

时间:2014-11-30 16:27:56

标签: c++ stl

我在运行代码时遇到分段错误,在push_back()函数中, 我的节目如下:

程序:

#include<iostream>
#include <vector>
using namespace std;

class Point
{
  private:
    int x, y;
    int * p;
  public:

    Point(int x1, int y1)  {
      x = x1; y = y1;
      *p = 1;
    }

    Point(const Point & p2) {
      x = p2.x;
      y = p2.y;
      *p = 1;
    }
};

int main()
{
  Point p1(10, 15);
  Point p2 = p1;
  vector<Point> vec;
  for (int i=0; i<10; i++)
  {
    vec.push_back(p2);
  }
}

有人能否在上述程序中给出分段错误的原因???? 有人能否在上述程序中给出分段错误的原因????

2 个答案:

答案 0 :(得分:5)

Point(int x1, int y1)  {
  x = x1; y = y1;
  *p = 1;            <<< allocate memory for this pointer first.
}

您正在取消引用未初始化的指针。

答案 1 :(得分:2)

如果你想直接修改它们的值,我建议公开x和y;它比让吸气剂和制定者更好地完成这项任务更好。同时,我建议修改你的代码:

int *p = new int;

执行此操作将为指针分配内存,然后您可以为其指定值。出于好奇,指针是什么?