c言語関数内の外部への空間割り当て問題

1038 ワード

                            ,          ,      ,                。                            void Init(char* p)           :
void Init(char* p) {
          p = (char *) malloc(sizeof(char)*MAX);
          .........
}

実はこのようなやり方は間違っていて、もしこのように書くならば、あなたは次のコードとどんな違いがありますか?
void Init(int a) { int b = 0; a = b;}
ある人は区別があると言っています.私はメモリ空間を割り当てて、pに値を割り当てましたか?malloc以降に返される値は変数ではないかと考えてみましょう.実はbと同じポインタ変数にすぎないが、実は変数である.そのInit(char*p)この中のpは実は外部で呼び出されたcharポインタの1つの変数のコピーにすぎません.あなたが関数体でこの変数に与える値はコピーされたcharポインタの変数に何の影響も与えません.古典的なポインタの値伝達問題のように.では、関数内で外部ポインタ変数をどのように空間的に割り当てるべきかと聞かれました.以前の古典的なポインタ伝値を参考にしてもいいですか.ポインタ変数を操作して修正するのは同じですか.賢い人はすぐに住所を追加すれば終わりではないかと思っています.正しい書き方は以下のようにしています.
void Init(char** p) { 
          *p = (char *)malloc(sizeof(char)*MAX); 
              .............
}

このように書くのが正しいが、1つ目はメモリの漏洩だけが発生する.こんな低級な過ちを犯さないでください.