掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ポインタのポインタ (ID:64684)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
freeするのはポインタのポインタではないですよ? なんでポインタのポインタにしているのかというのは理解できていますか? まずポインタ無関係で void hoge(int n){ n = 10; } int main(){ int n = 0; hoge(n); return 0; } でnが10にならないのは理解できますよね? それをポインタ渡しにすることによって void hoge(int* n){ *n = 10; } int main(){ int n = 0; hoge(&n); return 0; } nが10になってくれます。 そこでint を char* に置き換えて考えて見ます。 void hoge(char* n){ n = (char*)10; } // サンプルなので実際に *n を参照しないように。 int main(){ char* n = 0; hoge(n); return 0; } このときnの値は10にはなりません。 同様にnを10にするには void hoge(char** n){ *n = (char*)10; } int main(){ char* n = 0; hoge(&n); return 0; } となります。 実際に10になっているのは n であって &n の値ではありません。 で、(char*)10をmallocに変更すると、 void hoge(char** n){ *n = (char*)malloc(10); } int main(){ char* n = 0; hoge(&n); return 0; } となります。 これは int main(){ char* n = 0; n = (char*)malloc(10); return 0; } と意味合い的には同じなので freeするのは n で、&nではないのがわかります。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.