説明
解放済みのメモリを読み書きすると、すでに別の用途に再利用されたメモリへアクセスするおそれがあります。
想定される影響
- 情報漏えい、メモリ破損、コード実行
対処方法
メモリの解放後はポインターを使わず、所有権を明確にします。C++ではRAIIに基づくスマートポインターを使います。
例
変更前
c
char *p = malloc(16);
free(p);
p[0] = 'x';
変更後
c
char *p = malloc(16);
if (p == NULL) { return; }
p[0] = 'x';
free(p);
説明:
- 変更前: メモリを解放した後に、ポインターを使って書き込んでいます。
- 変更後: メモリを使う処理をすべて終えてから解放します。