gpt4 book ai didi

c++ - 指针分配和段错误

转载 作者:行者123 更新时间:2023-11-28 03:34:06 24 4
gpt4 key购买 nike

我是 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?
}

我只想将数组的第 cID 个成员指向 classb。

我不断遇到与上述类似的分配错误。不知道为什么,我把cID打印出来了,肯定小于我们在ClassA的构造函数中声明的数组大小。

为什么该分配是非法的,或者为什么我会遇到段错误?

最佳答案

正如我们在 chat 中意识到的那样,我只是把问题记录在这里,以供引用。

问题出在片上

RegisteredVMs = new VendingMachine *[nVendingMachines];
for (unsigned int i = 0; i < nVendingMachines; i++){
RegisteredVMs = NULL;
}

RegisteredVMs 被分配并立即设置为 NULL。稍后在导致段的 VMregister() 函数中访问此指针。错误。

指针很难并且很容易出错。只有在没有其他办法时才使用它们。既然这是作业题,既然你说你对界面没有发言权,我看你必须使用它们。

关于c++ - 指针分配和段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11601948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com