問題は、おそらく最新のフルサービスのオペレーティング システムで実行していて、ほとんどの C プログラミング入門書で説明されているものよりも複雑な抽象マシンを提供しているということです。
特に、任意のアドレスへのアクセスには OS による制限があります。スタックとデータセグメントを使用する権限があり、ヒープの一部にアクセスする権限があることを確認するのは関数ファミリーであるため、標準変数に関連付けられたアドレスを見てもこれに気付かないalloc
彼らがあなたに手渡すこと。
そのため、権限のないメモリにアクセスしているため、ほとんどの OS で「セグメンテーション違反」と呼ばれる障害が発生し、プログラムが突然終了します。
それについて何ができますか?
を呼び出してヒープに大きなブロックを割り当て、その範囲内の数字のみを入力char *p = malloc(1000000);
して開始アドレスと終了アドレスを見つけます。printf("start:\t%p\nend\t%p\n",(void*)p,(void*)(p+1000000));
%p
指定子 print 指定子は 16 進数で出力されるため、おそらく同じ基数でアドレスを入力する必要があることに注意してください。その点で標準ライブラリ関数strtol
は役に立ちます。
より洗練されたアプローチは、OS の API を使用して任意のアドレスへのアクセス許可を要求することですが、値によっては OS が単純に拒否する可能性があります。