- ベストアンサー
structをポインタ宣言時の領域
struct test{ char* aaa; int bbb; long ccc; char ddd[10]; }; というような構造体があるとします。 これを test* AAA = 0; と宣言した時点でデータ領域は確保されているのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
確保されません 変数AAAはあくまでstruct testをさす事のできるポインタのサイズしかありません ポインタの先に実体を作りたい場合はmalloc(sizeof(test))なりしてやってメモリを確保してあげないと(ちゃんとしたOS下では)アクセス違反等が発生します
その他の回答 (1)
- ponnta
- ベストアンサー率17% (31/179)
回答No.2
ポインタはアドレスを格納する変数なのでデータ型に関係 なくサイズは一定です。 struct test* AAA; だとtest型の構造体をあつかうポインタ変数になってしまいます。 領域を確保するならまず struct test xxxx; と書いて領域を確保してください。 (xxxxは適当な変数名にしてね) alfeimのようにmalloc()を使ってもかまいません。 初心者であればとりあえずAUTO変数か静的変数で 領域を作ってみたほうが楽かと思います。 ポインタでアクセスしたいのならその後で ポインタにアドレスを入れてください AAA = &xxxx
質問者
お礼
どうも、ありがとうございました。 すっきりしました。
お礼
ありがとうございました。 やっぱりmallocしないと確保はされないんですね。