我正在为一个现有的主程序开发一个类,它在delete []
行上抛出一个段错误。我不太确定为什么这样做。我问教授,我被告知重读有关指针如何被破坏的部分。任何帮助,将不胜感激!相关代码如下。
来自主要:
Point* v = new Point[nVertices];
for (int i = 0; i < nVertices; ++i)
in >> v[i].x >> v[i].y;
Asteroid aster1 (nVertices, v);
delete [] v;
小行星构造函数的类部分:
Asteroid::Asteroid(int nVertices, Point vertexPoints[]){
numVertices = nVertices;
for (int i = 0; i < numVertices; i++){
vertices[i] = vertexPoints[i];
}
}
.h部分如果有意义:
class Asteroid{
int numVertices;
Point vertices[];
public:
//Attributes
Asteroid (int,Point*);
答案 0 :(得分:2)
段错误看起来不太可能在delete[]
行。它更有可能发生在Asteroid
构造函数中,因为在创建应该包含它们的数组之前,您已经尝试访问顶点。
答案 1 :(得分:1)
我原来的回答是错的,但这就是我认为user268396的意思。
class Asteroid{
int numVertices;
Point* vertices; // change vertices to be a pointer.
public:
//Attributes
Asteroid (int,Point*);
并且您的构造函数应该具有以下内容:
Asteroid::Asteroid(int nVertices, Point vertexPoints[]){
numVertices = nVertices;
// Allocate array here. You should also you should add a delete[] in the destructor.
vertices = new Point[numVertices];
for (int i = 0; i < numVertices; i++){
vertices[i] = vertexPoints[i];
}
}
答案 2 :(得分:0)
对delete []
的调用不是你的程序变坏的地方。
您在vertices
课程中初始化Asteroid
的位置是什么?我所看到的只是一个零大小数组的声明(根据你的编译器,它可能会发出警告)。
如何完全忘记数组并使用vector<T>
?那,或者将vertices
声明为指针并正确初始化它。