[C ++对象指针的内存分配

问题描述 投票:3回答:2
#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”应该会产生分段错误。我正在访问未分配内存的位置。但我没有遇到细分错误。编译器只打印一个随机值。

我的问题是“在这里三个对象分配了内存还是只有两个”?为什么没有分割错误?

c++ object memory pointers allocation
2个回答
4
投票

[a1被分配到自动存储器中。

b2不是一个对象(不是您定义的类型的对象),而是一个指针,并且它不指向有效位置。它是一个悬空指针,对其取消引用会导致undefined behavior。可能发生任何事情。

pointer是指向动态内存中对象的指针。它本身不是对象,但指向new test创建的对象。

这里是三个对象分配了内存还是只有两个

仅两个。

为什么没有分段错误?

因为未定义的行为表示会发生任何事情。任何行为都是符合标准的。


0
投票

我假设指针'b2'没有为其分配内存?

  • 通常在创建对象时会自动创建内存。

  • [创建指向对象的指针时始终分配NULL,避免访问冲突。

示例:

       test *b2; //not safe

       test *b2 = NULL; // SAFE
© www.soinside.com 2019 - 2024. All rights reserved.