1. ホーム
  2. c

NULLポインタの参照を解除する」とは、具体的にどのようなことですか?

2023-12-01 22:21:12

質問

私はC言語の全くの初心者ですが、大学の授業中に、しばしばNULLポインタの参照解除に言及するコード内のコメントに出会いました。 私は C# のバックグラウンドを持っており、これは .Net で取得する "NullReferenceException" に似ているかもしれないと感じていましたが、今私は真剣に疑問を持っています。

どなたか、これが何であり、なぜ悪いのか、素人の私に正確に説明していただけませんか。

どのように解決するのですか?

A NULL ポインタは存在しないメモリを指します。これはアドレス 0x00000000 または他の実装で定義された値です (実際のアドレスになり得ない限り)。それを参照解除することは、ポインタが指すものにアクセスしようとすることを意味する。そのため * 演算子が再参照演算子です。

int a, b, c; // some integers
int *pi;     // a pointer to an integer

a = 5;
pi = &a; // pi points to a
b = *pi; // b is now 5
pi = NULL;
c = *pi; // this is a NULL pointer dereference

と全く同じものです。 NullReferenceException と全く同じですが、Cのポインターはどんなデータオブジェクトでも、たとえ配列の中の要素でも指し示すことができます。