【发布时间】:2012-07-22 16:24:55
【问题描述】:
我对 C++ 还很陌生,并且使用类似于以下代码的指针分配不断出现分段错误,我知道这意味着我正在访问尚未分配的内存,但我看不到在哪里:
我有两个班级:
class ClassA{ //class a decl.
ClassB** oArray;
unsigned int x;
public:
ClassA(unsigned int X);
void oMember(ClassB* classb);
}
ClassA::ClassA(unsigned int X){ //Constructor for class a
x = X;
oArray = new ClassB* [x];
for (unsigned int i = 0; i < x; i++){
oArray = NULL;
}
}
class ClassB{ //rough decl of class B
public:
getId();
}
我有一个类成员函数,它接收指向另一个类的指针,如下所示:
void ClassA::oMember(ClassB* classb){
unsigned int cID = classb.getId(); //defined in class b
oArray[cID] = classb; //if cID is less than x defined in constructor, is this legal?
}
我只想将数组的第 cIDth 成员指向 classb。
我不断收到与上述类似的分配错误。我不太清楚为什么,我打印了 cID,它肯定小于我们在 ClassA 的构造函数中声明的数组的大小。
为什么这个分配是非法的,或者为什么我得到一个分段错误?
【问题讨论】:
-
由于您的班级正在分配内存,您应该遵循以下内容:Rule of Three。另一方面,
ClassB *classb) { ... classb.getId();不应该编译。 -
如果您发布有助于我们重现问题的代码(听到的代码无法编译),您会更容易做到这一点。否则代码有很多问题,我们不太可能真正帮助您。
-
@pmr,好的,我会发布代码
-
@MyName:你不应该使用指针。我不确定课堂上双指针的意图是什么。在构造函数第 9 行中,您分配 RegisteredVMs 指针。在紧接的下一个循环中,您多次删除该指针。为什么不简单地使用向量或映射并完全避免使用指针?