我写了下面的一段代码,我相信如果我试图访问一个我什至没有为其分配内存的结构的成员,它就会崩溃。但是我很惊讶 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++ 没有自动分配内存;指针包含一个任意值,它恰好是程序内存空间中的有效地址,因此您没有遇到段错误。您的程序表现出未定义的行为,下次运行时可能无法运行。
未定义的行为并不能保证崩溃,这就是它被称为未定义的原因。