[英]C++ dynamic memory allocation of struct inside class via pointers is assigned nullptr “sometimes”
我有一个简单的例子。 我有一个类,在其中有一个结构,其中包含一个double类型的指针。 在该类内部,使用其中的函数,我打算使用指针分配动态内存。 出于好奇,为什么有时在我编译(占编译时间的50%)时将这些指针初始化为null,有时却不为null?
从头文件开始的最小工作示例可能是:
class house{
struct room{
double *roomPtr;
} roomObj;
room *myRoom = &roomObj;
public:
void startPainting();
private:
void paintRoom();
};
至于我的cpp文件,则可以将其总结为(通过上面的一个最小示例)为:
void house::paintRoom(){
if (myRoom->roomPtr != nullptr){
myRoom->roomPtr = new double[someNbr];
}
else{
cout << "Allocation failed !" << endl;
}
}
为了方便起见,请考虑在此类中,公共功能的工作是简单地分配内存(暂时不要释放内存),即
void house::startPainting(){
paintRoom();
}
无论如何,在编译main时(通过简单地创建类的对象并运行public函数...),有时(几乎每隔一次)我会收到“分配失败!” -即指针为空。 这是典型的,还是我做错了什么?
另外,我知道我可以不使用上面的方法来分配内存,而可以自己执行以下操作而无需其他指针:
roomObj.roomPtr = new double[someNbr];
这总是有效的,但是我再次好奇为什么上面的方法并不总是有效。 您能否对我的缺点有所了解?
谢谢 !
您需要将指针roomPtr
分配给默认值,例如在类的构造函数中。 这些对象中的内存以实现定义的方式初始化,因此您可以随机将其分配为空值,但不能保证。
例如,此修改会更好,并提供一致的行为:
house::house() : roomObj(), myRoom(&roomObj) {
myRoom->roomPtr = nullptr;
}
顺便提一句,对于我来说,为什么当您有一个单独的成员变量来描述它时,为什么第二个成员变量仅指向同一类中的某些内存,这对我来说并没有什么意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.