次のコードを書きましたが、メモリを割り当てなかった構造体のメンバーにアクセスしようとするとクラッシュすると考えました。しかし、私はC++が自動的に構造体のメモリを割り当てたことにかなり驚いていました。それは正常な行動ですか?比較のために、オブジェクトへのポインタを宣言し、実際にオペレータ "new"でオブジェクトを作成せずにメンバにアクセスしようとすると、プログラムがクラッシュします。私は信じられないときにそれがなぜ機能するのか不思議です。C++で構造体へのポインタを宣言すると、そのメンバに自動的にメモリが割り当てられます。私が間違っている?
これは私のプログラムです:
#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;
}
は、OS:Windows 7の
はコンパイラ:MinGWのGCC 4.6.1
あなたは間違っています。これはちょうど*動作するように見えます - それは未定義の動作です。 – jrok
あなたのコードのバグを修正すれば、謎は解消されます。壊れたコードは奇妙なことをします、それはそうです。 –
あなたが言ったことの重要な問題は、 "C++は構造体のメモリを自動的に割り当てました"。いいえ、それはしなかった。ポインタはちょうどmemアドレスですが、ポインタはどこにポイントしているのかわかりません。 – Avi