在C++中声明一个指向struct的指针会自动为其成员分配内存.我错了吗?

Fer*_*llo 4 c++ pointers data-structures

我编写了下面这段代码,我相信如果我试图访问我甚至没有分配内存的结构的成员,它会崩溃.但我很惊讶C++自动为结构分配了内存.这是正常的行为吗?为了进行比较,如果您声明一个指向对象的指针然后尝试访问任何成员而不实际使用运算符"new"创建该对象,则程序将崩溃.当我相信它不应该时,我只是好奇它为什么会起作用.

这是我的计划:

#include <stdio.h>

struct Produto
{
    int codigo;
    float preco;
};

int main()
{
    struct Produto* sabonete;
    sabonete->codigo = 654321;
    sabonete->preco = 0.85;

    printf( "Codigo = %i\n", sabonete->codigo );
    printf( "Preco = R$ %.2f\n", sabonete->preco );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

操作系统:Windows 7
编译器:MinGW GCC 4.6.1

Fre*_*Foo 11

C++没有自动分配内存; 指针保存一个任意值,恰好是程序内存空间中的有效地址,因此您没有得到段错误.您的程序显示未定义的行为,下次运行时可能无法正常工作.

未定义的行为不能保证崩溃,这就是为什么它被称为undefined.

  • @FernandoAiresCastello:不,事实上它没有.您正在调用未定义的行为.根据定义*任何*都可能发生.您的代码不正确. (9认同)
  • 它以同样的方式工作,以每小时80英里的速度沿着高速公路行驶,在前保险杠和下一辆车的"工程"之间有三英尺.你可能能够逃脱它,但是有可能是最轻微的事情会出错,然后你就会崩溃. (2认同)