[英]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.