CのダングリングポインターとNULLポインターの違いは何ですか?技術的には、両方とも同じように見えます。


答え 1:

これらのポインターのいずれも逆参照しない限り、違いはありません。したがって、ダングリングは、ポインターが指すメモリを他の何かに再利用できることを意味しますが、プログラムは古いコンテンツがまだ存在していると見なし、アクセスしようとします。これは通常、プログラム実行のある時点で誤った動作を引き起こします。

それに加えて、質問自体が「ポインタを理解していない」ことを強く示していると感じています。メモリが各ボックスに内容(値、通常は0 ... 255)を持つことができる番号付きのボックスの行としてメモリを想像する場合、ポインタは番号を保持する単なる整数です(ここではアーキテクチャの詳細を簡略化しています)それらのボックスのいずれかの値)。


答え 2:

ここにはたくさんの「英語」があります。これは概念をすでに知っている人にとっては役に立つかもしれませんが、これらを知らない人にとっては意味のないテキストにすぎません。しかし、答えと比phorの楽しい商はカチカチです。

Nullポインター:何もしないアドレスまたはNULLロケーションを含むポインター。この場所への書き込みは誤りです。これは、セグメンテーションフォールトやクラッシュを引き起こす可能性のあるメモリロケーションにプログラマが誤って書き込むことを防ぐために設計されています。アイデアは、常にNULLでポインタを初期化し、書き込み前にNULLをチェックすることでした。このシナリオを考慮してください:

int * p; //現在、このポインタにはランダムなアドレスが含まれており、セグメント外であっても任意の場所を指すことができます

* p = 10; //これは間違いなく間違いを与えるでしょう。

安全な方法は次のようなものです:

int * p = NULL;

if(p!= NULL)

* p = 10;

宙ぶらりんのポインター:名前が示すように、もともと指していたメモリーブロックが何らかの形で解放されてから、どこを指し示すのかがわからないポインター。

ポインターをぶら下げるには、さまざまな方法があります。最も一般的な方法は、新規作成、コピー、削除です

int * p = NULL; int * q = NULL;

p =新しいx;

q = p;

削除q; // qとqによるメモリブロックポインタの両方がメモリから削除されます

//ここから、メモリに存在しないアドレスを持つポインタpができます。このポインターに何らかの値を割り当てようとすると、問題が発生します。ここではpが宙ぶらりんのポインターです

* p = 10; //クラッシュ

ダングリングポインターを誤って作成する可能性のある他の方法は、割り当てまたはオブジェクトをメソッドに渡すことによってオブジェクトの浅いコピーを行い、コンパイラが提供するコピーコンストラクタを使用して再び浅いコピーを行うことです。


答え 3:

ここにはたくさんの「英語」があります。これは概念をすでに知っている人にとっては役に立つかもしれませんが、これらを知らない人にとっては意味のないテキストにすぎません。しかし、答えと比phorの楽しい商はカチカチです。

Nullポインター:何もしないアドレスまたはNULLロケーションを含むポインター。この場所への書き込みは誤りです。これは、セグメンテーションフォールトやクラッシュを引き起こす可能性のあるメモリロケーションにプログラマが誤って書き込むことを防ぐために設計されています。アイデアは、常にNULLでポインタを初期化し、書き込み前にNULLをチェックすることでした。このシナリオを考慮してください:

int * p; //現在、このポインタにはランダムなアドレスが含まれており、セグメント外であっても任意の場所を指すことができます

* p = 10; //これは間違いなく間違いを与えるでしょう。

安全な方法は次のようなものです:

int * p = NULL;

if(p!= NULL)

* p = 10;

宙ぶらりんのポインター:名前が示すように、もともと指していたメモリーブロックが何らかの形で解放されてから、どこを指し示すのかがわからないポインター。

ポインターをぶら下げるには、さまざまな方法があります。最も一般的な方法は、新規作成、コピー、削除です

int * p = NULL; int * q = NULL;

p =新しいx;

q = p;

削除q; // qとqによるメモリブロックポインタの両方がメモリから削除されます

//ここから、メモリに存在しないアドレスを持つポインタpができます。このポインターに何らかの値を割り当てようとすると、問題が発生します。ここではpが宙ぶらりんのポインターです

* p = 10; //クラッシュ

ダングリングポインターを誤って作成する可能性のある他の方法は、割り当てまたはオブジェクトをメソッドに渡すことによってオブジェクトの浅いコピーを行い、コンパイラが提供するコピーコンストラクタを使用して再び浅いコピーを行うことです。


答え 4:

ここにはたくさんの「英語」があります。これは概念をすでに知っている人にとっては役に立つかもしれませんが、これらを知らない人にとっては意味のないテキストにすぎません。しかし、答えと比phorの楽しい商はカチカチです。

Nullポインター:何もしないアドレスまたはNULLロケーションを含むポインター。この場所への書き込みは誤りです。これは、セグメンテーションフォールトやクラッシュを引き起こす可能性のあるメモリロケーションにプログラマが誤って書き込むことを防ぐために設計されています。アイデアは、常にNULLでポインタを初期化し、書き込み前にNULLをチェックすることでした。このシナリオを考慮してください:

int * p; //現在、このポインタにはランダムなアドレスが含まれており、セグメント外であっても任意の場所を指すことができます

* p = 10; //これは間違いなく間違いを与えるでしょう。

安全な方法は次のようなものです:

int * p = NULL;

if(p!= NULL)

* p = 10;

宙ぶらりんのポインター:名前が示すように、もともと指していたメモリーブロックが何らかの形で解放されてから、どこを指し示すのかがわからないポインター。

ポインターをぶら下げるには、さまざまな方法があります。最も一般的な方法は、新規作成、コピー、削除です

int * p = NULL; int * q = NULL;

p =新しいx;

q = p;

削除q; // qとqによるメモリブロックポインタの両方がメモリから削除されます

//ここから、メモリに存在しないアドレスを持つポインタpができます。このポインターに何らかの値を割り当てようとすると、問題が発生します。ここではpが宙ぶらりんのポインターです

* p = 10; //クラッシュ

ダングリングポインターを誤って作成する可能性のある他の方法は、割り当てまたはオブジェクトをメソッドに渡すことによってオブジェクトの浅いコピーを行い、コンパイラが提供するコピーコンストラクタを使用して再び浅いコピーを行うことです。


答え 5:

ここにはたくさんの「英語」があります。これは概念をすでに知っている人にとっては役に立つかもしれませんが、これらを知らない人にとっては意味のないテキストにすぎません。しかし、答えと比phorの楽しい商はカチカチです。

Nullポインター:何もしないアドレスまたはNULLロケーションを含むポインター。この場所への書き込みは誤りです。これは、セグメンテーションフォールトやクラッシュを引き起こす可能性のあるメモリロケーションにプログラマが誤って書き込むことを防ぐために設計されています。アイデアは、常にNULLでポインタを初期化し、書き込み前にNULLをチェックすることでした。このシナリオを考慮してください:

int * p; //現在、このポインタにはランダムなアドレスが含まれており、セグメント外であっても任意の場所を指すことができます

* p = 10; //これは間違いなく間違いを与えるでしょう。

安全な方法は次のようなものです:

int * p = NULL;

if(p!= NULL)

* p = 10;

宙ぶらりんのポインター:名前が示すように、もともと指していたメモリーブロックが何らかの形で解放されてから、どこを指し示すのかがわからないポインター。

ポインターをぶら下げるには、さまざまな方法があります。最も一般的な方法は、新規作成、コピー、削除です

int * p = NULL; int * q = NULL;

p =新しいx;

q = p;

削除q; // qとqによるメモリブロックポインタの両方がメモリから削除されます

//ここから、メモリに存在しないアドレスを持つポインタpができます。このポインターに何らかの値を割り当てようとすると、問題が発生します。ここではpが宙ぶらりんのポインターです

* p = 10; //クラッシュ

ダングリングポインターを誤って作成する可能性のある他の方法は、割り当てまたはオブジェクトをメソッドに渡すことによってオブジェクトの浅いコピーを行い、コンパイラが提供するコピーコンストラクタを使用して再び浅いコピーを行うことです。


答え 6:

ここにはたくさんの「英語」があります。これは概念をすでに知っている人にとっては役に立つかもしれませんが、これらを知らない人にとっては意味のないテキストにすぎません。しかし、答えと比phorの楽しい商はカチカチです。

Nullポインター:何もしないアドレスまたはNULLロケーションを含むポインター。この場所への書き込みは誤りです。これは、セグメンテーションフォールトやクラッシュを引き起こす可能性のあるメモリロケーションにプログラマが誤って書き込むことを防ぐために設計されています。アイデアは、常にNULLでポインタを初期化し、書き込み前にNULLをチェックすることでした。このシナリオを考慮してください:

int * p; //現在、このポインタにはランダムなアドレスが含まれており、セグメント外であっても任意の場所を指すことができます

* p = 10; //これは間違いなく間違いを与えるでしょう。

安全な方法は次のようなものです:

int * p = NULL;

if(p!= NULL)

* p = 10;

宙ぶらりんのポインター:名前が示すように、もともと指していたメモリーブロックが何らかの形で解放されてから、どこを指し示すのかがわからないポインター。

ポインターをぶら下げるには、さまざまな方法があります。最も一般的な方法は、新規作成、コピー、削除です

int * p = NULL; int * q = NULL;

p =新しいx;

q = p;

削除q; // qとqによるメモリブロックポインタの両方がメモリから削除されます

//ここから、メモリに存在しないアドレスを持つポインタpができます。このポインターに何らかの値を割り当てようとすると、問題が発生します。ここではpが宙ぶらりんのポインターです

* p = 10; //クラッシュ

ダングリングポインターを誤って作成する可能性のある他の方法は、割り当てまたはオブジェクトをメソッドに渡すことによってオブジェクトの浅いコピーを行い、コンパイラが提供するコピーコンストラクタを使用して再び浅いコピーを行うことです。


答え 7:

ここにはたくさんの「英語」があります。これは概念をすでに知っている人にとっては役に立つかもしれませんが、これらを知らない人にとっては意味のないテキストにすぎません。しかし、答えと比phorの楽しい商はカチカチです。

Nullポインター:何もしないアドレスまたはNULLロケーションを含むポインター。この場所への書き込みは誤りです。これは、セグメンテーションフォールトやクラッシュを引き起こす可能性のあるメモリロケーションにプログラマが誤って書き込むことを防ぐために設計されています。アイデアは、常にNULLでポインタを初期化し、書き込み前にNULLをチェックすることでした。このシナリオを考慮してください:

int * p; //現在、このポインタにはランダムなアドレスが含まれており、セグメント外であっても任意の場所を指すことができます

* p = 10; //これは間違いなく間違いを与えるでしょう。

安全な方法は次のようなものです:

int * p = NULL;

if(p!= NULL)

* p = 10;

宙ぶらりんのポインター:名前が示すように、もともと指していたメモリーブロックが何らかの形で解放されてから、どこを指し示すのかがわからないポインター。

ポインターをぶら下げるには、さまざまな方法があります。最も一般的な方法は、新規作成、コピー、削除です

int * p = NULL; int * q = NULL;

p =新しいx;

q = p;

削除q; // qとqによるメモリブロックポインタの両方がメモリから削除されます

//ここから、メモリに存在しないアドレスを持つポインタpができます。このポインターに何らかの値を割り当てようとすると、問題が発生します。ここではpが宙ぶらりんのポインターです

* p = 10; //クラッシュ

ダングリングポインターを誤って作成する可能性のある他の方法は、割り当てまたはオブジェクトをメソッドに渡すことによってオブジェクトの浅いコピーを行い、コンパイラが提供するコピーコンストラクタを使用して再び浅いコピーを行うことです。


答え 8:

ここにはたくさんの「英語」があります。これは概念をすでに知っている人にとっては役に立つかもしれませんが、これらを知らない人にとっては意味のないテキストにすぎません。しかし、答えと比phorの楽しい商はカチカチです。

Nullポインター:何もしないアドレスまたはNULLロケーションを含むポインター。この場所への書き込みは誤りです。これは、セグメンテーションフォールトやクラッシュを引き起こす可能性のあるメモリロケーションにプログラマが誤って書き込むことを防ぐために設計されています。アイデアは、常にNULLでポインタを初期化し、書き込み前にNULLをチェックすることでした。このシナリオを考慮してください:

int * p; //現在、このポインタにはランダムなアドレスが含まれており、セグメント外であっても任意の場所を指すことができます

* p = 10; //これは間違いなく間違いを与えるでしょう。

安全な方法は次のようなものです:

int * p = NULL;

if(p!= NULL)

* p = 10;

宙ぶらりんのポインター:名前が示すように、もともと指していたメモリーブロックが何らかの形で解放されてから、どこを指し示すのかがわからないポインター。

ポインターをぶら下げるには、さまざまな方法があります。最も一般的な方法は、新規作成、コピー、削除です

int * p = NULL; int * q = NULL;

p =新しいx;

q = p;

削除q; // qとqによるメモリブロックポインタの両方がメモリから削除されます

//ここから、メモリに存在しないアドレスを持つポインタpができます。このポインターに何らかの値を割り当てようとすると、問題が発生します。ここではpが宙ぶらりんのポインターです

* p = 10; //クラッシュ

ダングリングポインターを誤って作成する可能性のある他の方法は、割り当てまたはオブジェクトをメソッドに渡すことによってオブジェクトの浅いコピーを行い、コンパイラが提供するコピーコンストラクタを使用して再び浅いコピーを行うことです。


答え 9:

ここにはたくさんの「英語」があります。これは概念をすでに知っている人にとっては役に立つかもしれませんが、これらを知らない人にとっては意味のないテキストにすぎません。しかし、答えと比phorの楽しい商はカチカチです。

Nullポインター:何もしないアドレスまたはNULLロケーションを含むポインター。この場所への書き込みは誤りです。これは、セグメンテーションフォールトやクラッシュを引き起こす可能性のあるメモリロケーションにプログラマが誤って書き込むことを防ぐために設計されています。アイデアは、常にNULLでポインタを初期化し、書き込み前にNULLをチェックすることでした。このシナリオを考慮してください:

int * p; //現在、このポインタにはランダムなアドレスが含まれており、セグメント外であっても任意の場所を指すことができます

* p = 10; //これは間違いなく間違いを与えるでしょう。

安全な方法は次のようなものです:

int * p = NULL;

if(p!= NULL)

* p = 10;

宙ぶらりんのポインター:名前が示すように、もともと指していたメモリーブロックが何らかの形で解放されてから、どこを指し示すのかがわからないポインター。

ポインターをぶら下げるには、さまざまな方法があります。最も一般的な方法は、新規作成、コピー、削除です

int * p = NULL; int * q = NULL;

p =新しいx;

q = p;

削除q; // qとqによるメモリブロックポインタの両方がメモリから削除されます

//ここから、メモリに存在しないアドレスを持つポインタpができます。このポインターに何らかの値を割り当てようとすると、問題が発生します。ここではpが宙ぶらりんのポインターです

* p = 10; //クラッシュ

ダングリングポインターを誤って作成する可能性のある他の方法は、割り当てまたはオブジェクトをメソッドに渡すことによってオブジェクトの浅いコピーを行い、コンパイラが提供するコピーコンストラクタを使用して再び浅いコピーを行うことです。


答え 10:

ここにはたくさんの「英語」があります。これは概念をすでに知っている人にとっては役に立つかもしれませんが、これらを知らない人にとっては意味のないテキストにすぎません。しかし、答えと比phorの楽しい商はカチカチです。

Nullポインター:何もしないアドレスまたはNULLロケーションを含むポインター。この場所への書き込みは誤りです。これは、セグメンテーションフォールトやクラッシュを引き起こす可能性のあるメモリロケーションにプログラマが誤って書き込むことを防ぐために設計されています。アイデアは、常にNULLでポインタを初期化し、書き込み前にNULLをチェックすることでした。このシナリオを考慮してください:

int * p; //現在、このポインタにはランダムなアドレスが含まれており、セグメント外であっても任意の場所を指すことができます

* p = 10; //これは間違いなく間違いを与えるでしょう。

安全な方法は次のようなものです:

int * p = NULL;

if(p!= NULL)

* p = 10;

宙ぶらりんのポインター:名前が示すように、もともと指していたメモリーブロックが何らかの形で解放されてから、どこを指し示すのかがわからないポインター。

ポインターをぶら下げるには、さまざまな方法があります。最も一般的な方法は、新規作成、コピー、削除です

int * p = NULL; int * q = NULL;

p =新しいx;

q = p;

削除q; // qとqによるメモリブロックポインタの両方がメモリから削除されます

//ここから、メモリに存在しないアドレスを持つポインタpができます。このポインターに何らかの値を割り当てようとすると、問題が発生します。ここではpが宙ぶらりんのポインターです

* p = 10; //クラッシュ

ダングリングポインターを誤って作成する可能性のある他の方法は、割り当てまたはオブジェクトをメソッドに渡すことによってオブジェクトの浅いコピーを行い、コンパイラが提供するコピーコンストラクタを使用して再び浅いコピーを行うことです。