我写了下面的一段代码,我相信如果我试图访问一个我什至没有为其分配内存的结构的成员,它就会崩溃。但是我很惊讶 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;
}

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

最佳答案

C++ 没有自动分配内存;指针包含一个任意值,它恰好是程序内存空间中的有效地址,因此您没有遇到段错误。您的程序表现出未定义的行为,下次运行时可能无法运行。

未定义的行为并不能保证崩溃,这就是它被称为未定义的原因。

10-07 21:55