C言語でヌルポインタが発生するケース
C言語でNULLポインタが発生するケースは、以下のようなものがあります。
- 初期化されていないポインタ: ポインタ変数が値を割り当てられていない場合、その値はヌルポインタになります。
- 初期化されていないポインタ変数int *ptr;
- NULLにポインターを設定する:NULLは空ポインター定数を表す事前定義マクロです。
- int *ptr=NULL; //ポインタにNULLを代入する
- 関数がヌルポインタを返す:関数の戻り値の型がポインタ型の場合に、ヌルポインタを返すことがあります。
- NULLを返す // 空ポインタを返します
- 動的メモリ割り当てに失敗した場合:mallocまたはcalloc関数を用いて動的メモリを割り当てた場合に、メモリ割り当てに失敗するとヌルポインタが返されます。
- int *ptr = (int *)malloc(sizeof(int));
if (ptr == NULL) {
printf(“メモリ割り当て失敗!\n”);
} - ポインタが指すオブジェクトの開放:ポインタが指すメモリ上のオブジェクトが開放された場合、ポインタはヌルポインタになります。
- int *ptr = malloc(sizeof(int));
free(ptr);
ptr = NULL; - 間違ったアドレスへのポインタアクセス: ポインタが未定義のアドレス(未割り当てのメモリ・解放済みのメモリなど)を参照している場合、ポインタはヌルポインタになる可能性があります。
- int *ptr = (int *)0x12345678; // 不正なアドレスをポイントするポインタ
ポインタを使用する際には、NULLポインタの状態を注意深く扱う必要があります。そうしないと、ポインタがぶらさがったり、セグメンテーションフォルトが生じるなどの問題が発生しかねません。