C++ 推回时的分段错误()

C++ 推回时的分段错误(),c++,stl,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; }

我在运行代码时遇到分段错误,在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);
  }
}
#包括
#包括
使用名称空间std;
类点
{
私人:
int x,y;
int*p;
公众:
点(整数x1,整数y1){
x=x1;y=y1;
*p=1;
}
点(常数点和p2){
x=p2.x;
y=p2.y;
*p=1;
}
};
int main()
{
第p1点(10,15);
点p2=p1;
向量向量机;
对于(int i=0;i
点(int x1,int y1){
x=x1;y=y1;

*p=1;如果您想直接修改x和y的值,我建议将其公开;这比使用getter和setter来完成这项工作要好。同时,我建议修改您的代码,如下所示:

int *p = new int;

这样做将为指针分配内存,然后您可以为其分配值。出于好奇,指针是用来干什么的?

p
是指针,但在取消引用它之前,您没有让它指向有效的对象。您能解释变量p的用途吗?如果删除它,崩溃将消失。您永远不会给p一个地址,所以您将1写入一个随机内存位置只是想在复制构造函数中增加该变量,以跟踪创建的副本数..但是如果我注释push_back()的话,这为什么运行得很好呢这只是未定义的行为。如果你浏览网站,你可以得到足够多的文章来完善你跑步的意义。现在你应该确保你没有取消引用未初始化的指针。如果我给p[0]=1,会发生什么?你间接地说*(p+0)= 1,IE*p=1 @克里斯,Vormeph,我正在学习C++,我想计算对象的拷贝数,在复制构造函数中,我将增加这个变量。如果你想这样做,你应该让P成为静态变量,使它在一个类中是全局的,不管实例化。每次调用构造函数,你都会增加这个变量。e、 因此,您应该使用*p++,而不是*p=1。其余的由您决定。目前,变量将始终使用类本身实例化;因此它将始终为1。
int *p = new int;