所以,我有两个类:Node和Graph。在Graph类的私有部分中,我声明了这个:
int size;
Node* n;
在Graph构造函数中,我正在尝试创建一个动态数组:
size=1;
Node *n = new Node[size];
但是我收到一个错误:“访问冲突读取位置0xcccccd44”。我该如何解决?我知道我必须对数组做错事,但我不知道如何修复它。
类图:
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());
}
}
答案 0 :(得分:2)
您正在构造函数中重新声明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());
}
}
在您的版本中,您正在初始化一个名为n
的局部变量,该变量与您班级中声明的n
不同。
答案 1 :(得分:0)
正如我在您发布其余代码之前在评论中提到的那样,您在此处隐藏了您的成员变量n
:
Node *n = new Node[size];
^^^^^^^
这声明了一个新的自动变量n
,它在您离开构造函数后将不存在,并且还会泄漏内存,只需将其更改为:
n = new Node[size];
正如其他人已经提到过使用std::vector会更容易。