【发布时间】:2012-03-14 09:11:32
【问题描述】:
我编写了以下代码,我相信如果我尝试访问我什至没有为其分配内存的结构的成员,它会崩溃。但我很惊讶 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++ 自动为结构分配内存”。不,它没有。指针只是一个内存地址,它不知道它指向哪里。
-
C++ 不会自动分配内存。在堆检查器下运行它,你会得到无效内存引用的报告。出于性能原因,C++(如 C)默认不检查这些:这是高级语言中的裸机编程。
标签: c++ pointers data-structures