gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:03:44 26 4
gpt4 key购买 nike

#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创建的对象。

Are three objects allocated memory here or only two

只有两个。

Why there is no segmentation fault ?

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

关于对象指针的 C++ 内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12999474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com