-7

C++ プログラムでいくつかのコードを分析しようとしています (私は C++ に非常に慣れていません)、次のコードが何を達成しようとしているのかわかりません。
ここで読んだスレッドに基づいて、deadbeef へのポインターを設定すると、ポインターが null になります。ただし、ビジュアルスタジオではこれを行うことができず、エラーが発生します。2番目のポインターが何をすべきかわかりません。任意の入力をいただければ幸いです。

long* firstpointer = (long *)((void *)0);
char* secondpointer = (char*) ((void *)0);

*firstpointer = 0xDEADBEEF;
strcpy(secondpointer,"Here is some text, here is some more");
4

1 に答える 1

3

ここで読んだスレッドに基づいて、deadbeef へのポインターを設定すると、ポインターが null になります。

いいえ、それは正しくありません。deadbeefよくある「ナンセンスパターン」ですが、絶対にイコールではありませnull。ポインター (より一般的にはメモリ領域) を などの既知の異常なパターンに設定する一般的な理由は、deadbeef初期化されていないメモリ領域を検出するためです。ポインターを表すために一般的に使用されるすべてゼロのパターンはnull、適切な候補ではありません。連続したメモリ位置でゼロのシーケンスを見つける可能性は、s のシーケンスを見つけるよりもはるかに高いからですdeadbeef

の呼び出しで表示されるクラッシュは、が無効な値に設定されているstrcpyために発生します。が未定義の動作を示さないようにするために、 に収まる十分なメモリを、その終端のゼロと共にsecondpointer割り当てる必要があります。"Here is some text, here is some more"strcpy

于 2013-04-01T03:01:47.040 に答える