Last Update 2021/10/09
-Wno-free-nonheap-object
ヒープ領域に割り当てられていないオブジェクトを解放しようとした場合でも警告しない
テスト概要
オプション無し、および-Wno-free-nonheap-objectオプションを使用した際の警告出力例
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
GNU C Library 2.28
GNU Binutils 2.31.1
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
使用ファイル
sample.c
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *pc = (char *)malloc(20);
char a[10];
/* ヒープ領域に割り当てられたメモリを解放 */
free(pc);
/* ヒープ領域に割り当てられていないオブジェクトを解放 */
free(a);
return 0;
}
オプション無しでコンパイルを実行
$ gcc sample.c
sample.c: In function ‘main’:
sample.c:13:2: warning: attempt to free a non-heap object ‘a’ [-Wfree-nonheap-object]
free(a); ヒープ領域に割り当てられていないオブジェクトaの解放を試みる事への警告
^~~~~~~
$ ./a.out 生成された実行ファイルを実行
free(): invalid pointer
Aborted (core dumped)
$ 無効なポインタの解放および異常終了のメッセージ
-Wno-free-nonheap-objectオプション使用してコンパイルを実行
$ gcc -Wno-free-nonheap-object sample.c エラー・警告無し
$