C言語のポインタ野生のフォームの原因と解決策

ワイルドポインタ

野生のポインタについて1。

  • 私たちは、そう野生の野生のポインタはポインタが何であるかを非常に一般的ですC言語プログラミングの過程でポインタをダングリングと、これはどのように起こるのですか?これが私たちの最初の問題を解決することです。その後、浮遊ポインタの問題を解決する方法です。
  • 野生ポインタがNULLの代わりにメモリ・ポインタをゴミ箱に指している;または未知のメモリ・ポインタを指しています。

2.理由が形成ワイルドポインタ

  1. ポインタうちPは無料ですが、それはNULLに設定されていません。ポインタはメモリが解放されたダイナミックを指しているように、free関数メモリへのポインタだけでポイントが、メモリが空きメモリになるためにそうすることを解放、しかし、ポインタ自体の内容は削除されません。これは非常に危険です。

  2. ポインタを初期化しませんでした。

  3. 変数の範囲を超えてポインタ操作。そのような配列の境界として。

  4. 内部スタックが復帰するまで解放されているので、スタックメモリを指すポインタを返さない、ポインタはメモリのこのブロックにアクセスし続けることができません。

:C言語のポインタのメモリパーティションとそれに関連する使用法についての私の他の二つのブログを参照することができ
ポインタ関数
C言語のメモリ管理

ダングリングポインタの問題を解決するために、いくつかの方法3。

彼は野生のポインタの形成を防ぐため、実際には、解決すべきと述べました。上記の理由から、以下のフォームには、前方に一つの共通の対策ずつ配置します。

  1. malloc()自動アプリケーション・ヒープ・スペースを解放するために自由に()関数を使用する場合は、ポインタがNULLにタイムリーに設定されています。以下のような:
int *p = (int *)malloc(sizeof(int));
free(p);
p = NULL;
  1. 定義ポインタの後にタイムリーを初期化します。あなたは直接ポインタの初期値に割り当てた値は、言葉を指しているしていない場合は予測不可能な結果を​​引き起こす可能性があります。あなたは良い習慣を開発する必要がありますので、同時に初期化するポインタを定義します。
  2. 等アクセスアレイまたはストリングへのポインタを使用する場合、それは留意すべきではない国境を越えたアクセスの範囲、。
  3. 私たちは、そのスタック領域は、関数が終了した後、ポインタメモリが解放されたので、別の関数へのポインタを返す定義されていない知っている、と我々はリターンする必要がある場合は、ポインタ、プットの前に静的な変更を加えることができます静的な記憶領域が行きます。不要なため、スタック領域を指すポインタを返すことがありません。
公開された49元の記事 ウォン称賛15 ビュー9276

おすすめ

転載: blog.csdn.net/wit_732/article/details/97951802