簡體   English   中英

對象指針的 C++ 內存分配

[英]C++ memory allocation for objects pointers

#include <iostream>
using namespace std;

class test
{
public:
    int a,b[100];
    test() {
        cout << "Constructor called" << " \n " ;
        a=10;
    }
};

int main()
{
    test a1;    
    test *b2;      
    test *pointer = new test; 

    cout << a1.a << endl;
    cout << pointer->a << " \n ";
    cout << b2->a << " \n ";

    return 0;
}

我想知道上面的代碼是否只創建了兩個對象,分別是“a1”對象和“pointer”對象指針。 我假設指針 'b2' 沒有為它分配內存。 在這種情況下,最后一個“ cout << b2->a ”應該會造成分段錯誤。 我正在訪問一個我尚未分配內存的位置。 但我沒有遇到分段錯誤。 編譯器只是打印一個隨機值。

我的問題是“這里分配了三個對象還是只有兩個”? 為什么沒有分段錯誤?

a1分配在自動內存中。

b2不是一個對象(好吧,不是你定義的類型的對象),而是一個指針,它不指向一個有效的位置。 它是一個懸空指針,取消引用它會導致未定義的行為 任何事情都可能發生。

pointer是指向動態內存中對象的指針。 它本身不是一個對象,但它指向由new test創建的對象。

是三個對象在這里分配內存還是只有兩個

只有兩個。

為什么沒有分段錯誤?

因為未定義的行為意味着任何事情都可能發生。 任何行為都符合標准。

我假設指針b2沒有為它分配內存?

  • 通常,當創建對象時,會自動創建內存。

  • 創建指向對象的指針時始終分配NULL ,以避免訪問沖突。

例子:

       test *b2; //not safe

       test *b2 = NULL; // SAFE

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM