2017-04-19 14 views
-3

次のコードについて混乱しています。Cポインタ解放について混乱しました

私は:

char *a = malloc(10); 
char *c = a; 
free(c); 

これは、Cポインタそのものや、それが指しているアドレスを解放しますか? (これはmallocedアドレスです)。

または、ポインタを解放して、割り当てられたアドレスだけを残しますか?

+2

**ポインタ**を解放しないでください!そしてあなたは決して住所を自由にすることはありません。 – Olaf

+0

[実際のポインタのコピーでfree()を使用すると合格/正解となりますか?](http://stackoverflow.com/questions/43456215/using-free-on-a-copy-of-the-actual) -pointer-acceptable-correct) –

答えて

-2

アドレスが指しているアドレスを解放します。あなたはまだポインタ 'c'を使用することができますが、それは危険であり、決して実行しないでください。

+0

この例では、mallocされたメモリを解放しますか?右? –

+0

@Ali Kurabiyeciはい。ポインタはローカル変数です。 「破棄」できる唯一の方法は、定義した場所に関数を残した後です。 –

+2

あなたは決して住所を解放しません。オブジェクトを解放した後のポインタの値を使用すると、未定義のビヘイビアが呼び出されます。 **これは単に「危険」ではなく、単に違法です**。 – Olaf

3

「ポインタを解放する」ことは決してありません。これはまったくまったくばかばかしいことです。新しいユーザーは、他の厄介な元の新規ユーザーから簡単にすべてを拾い上げ、本当に疑問に思うことはありません。

メモリを割り当て、メモリを解放します。あなたがそのメモリについて語る方法は、それを指すポインタですが、メモリはリソースであり、メモリを記述するポインタではありません。

あなたは、ポインタを介して、メモリについて話しているので、ポインタが何malloc戻り、何free要しており、解放関数は「自由」動詞のように呼ばれ、メモリ解放関数がポインタを取るされているので、それがダウン簡単失策です滑りやすい斜面で「ポインタを自由にする」ことを話し始める。それは "ポインタを所有している"と言っても同じような誤解です。本当に所有されているものは、リソースの責任です。

+0

あなたは自分の場所をmallocedしている場合は、ポインタを解放することができます(しかし、私は今夜はおかしいと思います:)。 – ThingyWotsit

+0

@ ThingyWotsitあなたは助けていない:少なくとも私はポイント感謝の男を得る –

+0

@ThingyWotsit:厄介なニットピッカーの仕事はすでに取られている。しかし、あなたは正しいです:-) – Olaf

関連する問題