━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
C言語によるメモリ管理
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
●メモリの動的管理の注意点
領域確保の失敗
メモリ割り付け関数 malloc(), calloc() は領域確保に失敗する場合がある
・malloc(), calloc() の戻り値が NULL の場合にエラー処理
確保領域の未初期化
malloc() による確保領域が初期化されない
・データ構造の生成関数中で各領域(構造体メンバや配列要素など)を初期化
・malloc() の直後に memset() を使い,確保領域全体を適切に初期化
・calloc() を malloc() の代わりに使い,確保領域全体を 0 で埋める
解放済み領域の参照
ポインタが NULL でなければメモリ解放後も指し先を読み書きできてしまう
・使用前のポインタに NULL を設定
・ポインタが NULL かを検査してから指し先を参照
・メモリ解放後の不要なポインタに NULL を設定
確保領域の多重解放
同じ確保領域を複数回解放できてしまう
・確保領域を走査しながら解放するときの順序に注意
・複数のポインタで参照する確保領域が重なるときの解放に注意
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
演習のホームページ
山田 俊行
https://www.cs.info.mie-u.ac.jp/~toshi/