C++ 类中的对象数组

C++ 类中的对象数组,c++,arrays,class,dynamic,C++,Arrays,Class,Dynamic,所以,我有两个类:Node和Graph。在Graph类的私有部分,我声明: int size; Node* n; 在图形构造函数中,我尝试创建一个动态数组: size=1; Node *n = new Node[size]; 但我得到一个错误:“访问冲突读取位置0xCCCD44”。我怎样才能修好它?我知道我一定是对数组做了一些错误,但我不知道该如何修复它 类图: class Graph { friend class Node; private: int s

所以,我有两个类:Node和Graph。在Graph类的私有部分,我声明:

int size;
Node* n;
在图形构造函数中,我尝试创建一个动态数组:

size=1;

Node *n = new Node[size];
但我得到一个错误:“访问冲突读取位置0xCCCD44”。我怎样才能修好它?我知道我一定是对数组做了一些错误,但我不知道该如何修复它

类图:

class Graph {
    friend class Node;

    private:
        int size;
        Node* n;

    public:
        Graph();
        Graph(int, Vertex*);
        ~Graph();
        void Draw(RenderWindow &);
        void Update(RenderWindow &, GameObject &, bool);
};
和两名施工人员:

Graph::Graph() {
    size=1;

    Node *n = new Node[size];
}

Graph::Graph(int s, Vertex p[]) {
    size=s;
    Node *n = new Node[size];
    for (int i=0; i<size; i++) {
        n[i].setNumer(i);
        n[i].setX(p[i].getX());
        n[i].setY(p[i].getY());
    }
}
Graph::Graph(){
尺寸=1;
节点*n=新节点[大小];
}
Graph::Graph(int s,顶点p[]){
尺寸=s;
节点*n=新节点[大小];

对于(int i=0;i你在构造函数中重新定义了
n
。你用
size
做对了,但用
n
做不对。像这样

Graph::Graph(int s, Vertex p[]) {
    size=s;
    n = new Node[size];
    for (int i=0; i<size; i++) {
        n[i].setNumer(i);
        n[i].setX(p[i].getX());
        n[i].setY(p[i].getY());
    }
}
Graph::Graph(ints,顶点p[]){
尺寸=s;
n=新节点[大小];

对于(int i=0;i,正如我在发布其余代码之前的评论中提到的,您正在将您的成员变量
n
隐藏在此处:

Node *n = new Node[size];
^^^^^^^
这声明了一个新的自动变量
n
,它在您离开构造函数后将不存在,并且还会泄漏内存,只需将其更改为:

n = new Node[size];

正如其他人已经提到的那样,使用会更容易。

你需要发布更多的代码,但我猜你没有遵循。好吧,这里真的没有更多的代码要添加…我将把代码放在第一篇文章中。你的意思是初始化成员
n
,而不是用相同的名称声明一个局部变量吗?为什么不呢使用
std::vector
来避免手动指针杂耍带来的所有问题?这不应该是
n=new Node[size];
,您正在隐藏您的成员变量
n
。无论如何都要使用
std::vector