对象指针的C 内存分配

C++ memory allocation for objects pointers

本文关键字:内存 分配 指针 对象      更新时间:2023-10-16
#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"对象和"指针"对象指针。我认为指针" B2"不会为此分配内存。在这种情况下,最后一个" cout&lt;&lt; b2-> a"应该会产生分割故障。我正在访问一个我没有分配的内存的位置。但是我没有得到细分错误。编译器就是打印随机值。

我的问题是"这里分配了三个对象或仅两个对象"?为什么没有分段故障?

a1是在自动内存中分配的。

b2不是对象(嗯,不是您定义的类型的对象),而是指针,也不指向有效的位置。这是一个悬空的指针,将其删除导致未定义的行为。一切都可能发生。

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

是在这里分配的三个对象或仅两个对象

只有两个。

为什么没有分段故障?

因为未定义的行为意味着任何事情都可能发生。任何行为都是符合标准的。

我假设指针b2不会为其分配内存吗?

  • 一般而言,当创建对象是自动创建内存时。

  • 当创建对象指针时,请始终分配NULL,避免访问访问。

示例:

       test *b2; //not safe
       test *b2 = NULL; // SAFE

希望它有帮助。