0

初期化されていないメモリにアクセスしようとしていますが、

int *ptr;

// to this and that

*ptr = 8;
return 0;

次の例外が発生します。

sam2.exe の 0x0041145e で未処理の例外: 0xC0000005: アクセス違反書き込み場所 0xcccccccc。

0xccccccccこれで、Visual C++ で初期化されていないポインターに値が使用されることがわかりました。0x0041145eしかし、との意味がわかりません0xC0000005

明確にするために、マジック ナンバーに関する YouTube でビデオ チュートリアルを作成しようとしているため、この質問をしています。

私はあなたの助けに感謝します。ありがとう。

4

2 に答える 2

3

0xC0000005アクセス違反のエラーコードです。このようなポインターを使用した不正な操作はアクセス違反になるため、このコードが表示されます。一方、これ0x0041145eは魔法の番号ではなく、実行可能ファイル内の問題のある命令の場所であり、同じことを行う他のプログラムとは異なります。

于 2013-07-30T12:39:16.053 に答える
0

これはポインターの間違った使い方です。int *ptr; 上記の行は、ptr がポインターへのアドレスを保持していることを示しています。デフォルトでは、格納されているアドレスはコンパイラによってはガベージです。取得しているエラーにより、アドレスが 0xcccccccc であると想定しても安全です。

0x0041145e は、実行中の命令のアドレスであるか、スタックの最上位にある命令です。

あなたのコードは実行されていません。このようにコードを変更してください。
int *ptr = (int *)malloc(sizeof(int));
*ptr = 8;
0 を返します。

于 2013-07-30T12:42:49.737 に答える