いつもお世話になってます。
C言語のポインタとスタックについて質問です。
現在、C言語でのメモリ領域の使われ方について勉強していたのですが、ポインタとスタックの関係についてわからないところがあります。
疑問なのは「ポインタ変数を関数の戻り値としてリターンするとそのポインタ変数のアドレスは関数が終了してスタックフレームがポップされると無効になったり、他の関数の呼び出しでプッシュされたスタックフレームで上書きされてしまうのでないか」です。
自分がよく見るのは以下のように構造体にmallocでメモリを割り当てている関数です。
c
1struct 構造体 *func(void) 2{ 3 struct 構造体 *構造体ポインタ = malloc(100); 4 /* 他の処理... */ 5 return 構造体ポインタ; 6}
自分の理解ではこのような関数は正しく動作しないのですが、実際に実行して見ると何事もなく動いたりしますし、このような書き方をよく見かけます。きっと自分の理解が間違っているといいうことなのでしょうか。自分でも調べたりしていのですが、なぜ問題がないのかよくわからずにいます。
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/04 09:22