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