RPG講座を動画サイトで紹介してみた。ぱーと2

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

RPG講座を動画サイトで紹介してみた。ぱーと2

投稿記事 by softya(ソフト屋) » 14年前

RPG講座を再びニコ動とyoutubeで紹介してみました。
今回はどんな反響があるでしょうか?

[youtube][/youtube]

[nico]http://www.nicovideo.jp/watch/sm14330218[/nico]

SG
記事: 2
登録日時: 14年前

Re: RPG講座を動画サイトで紹介してみた。ぱーと2

投稿記事 by SG » 14年前

こんにちは、こちらでははじめまして。SGと申します。
RPG講座、大変勉強になります。不明点があるので質問させていただきたいのですが・・・
関係する記事にコメントを書くべきか、最新の記事に書かないと見ていただけないかも、など
色々考えていますが、もし明確にどこに質問すべきかというのがありましたら、お手数ですがご指示いただけますと幸いです。
(事実上softyaさんを名指ししてしまうことになるので、質問掲示板には書きませんでした。)
-----
STATEMNG_OBJECT STM_Init()関数についての質問です。
返り値がSTATEMNG_OBJECT objectですが、このオブジェクトはSTM_Init()関数内で宣言されているので、
関数を抜けると寿命が終わりますよね?ということはこれが指し示すメモリは開放されてしまわないのでしょうか?
もしそうであれば
s_GameMainData.StateObj = STM_Init(GAMEMAIN_STATE_MAX)
としてもs_GameMainData.StateObjに格納されている値は不定になると考えたのですが
そうはなっていないので不思議でたまりません。

STATEMNG_OBJECT STM_Init(STATEMNG_OBJECT, int stateNums)
として参照渡し(?)にするのではないかと考えたのですが・・・

int* Func()
{
int a = 0;
return &a;
}

のような問題とは違うのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: RPG講座を動画サイトで紹介してみた。ぱーと2

投稿記事 by softya(ソフト屋) » 14年前

リンクやコードを貼ってもらえばしてもらえば、質問掲示板で良いですよ。龍神録と同様な扱いだと思ってください。
私も外出していていないことがありますので。

たしかにローカル変数の寿命は関数内ですが、STATEMNG_OBJECTは次のように定義されています。
typedef struct tag_StateMngObject *STATEMNG_OBJECT;
つまり、ポインタなんです。
ポインタ値をmallocで割り当てていますから、ポインタ値の指すメモリはfreeされるまで解放されません。
なので、
return object;
で関数を抜けるときにobject変数自体は解放されますが、objectが保持していた値(ポインタ値)は戻り値として返りますし、mallocされたメモリは有効なままなので何ら支障はありません。

SG
記事: 2
登録日時: 14年前

Re: RPG講座を動画サイトで紹介してみた。ぱーと2

投稿記事 by SG » 14年前

こんばんは、お返事ありがとうございました。
では次回からは掲示板で質問させていただきます。お手数をおかけします。(わからないことがいっぱい・・・orz)

うーむ、変数とポインタとメモリの開放がごっちゃになっていたようです。ありがとうございました。
そうか・・値は値なのか・・・

講座の関数自体を追うことは(たぶん)出来てるんですが、
動的確保・ポインタ・アドレス・・・このあたりのキワードが自分の壁になっているようです。
これを使いこなせたらカッコイイなあと思いつつ、いまmap.cppであります。