2

私はC++の学習を始めたばかりなので、これで的外れかもしれませんが、気楽に行ってください。

私がやりたいことは、指定したメモリアドレスに書き込むことです-それが可能であれば?

私が使用しているコードは次のとおりです。

#include <iostream>

int main()
{
    using namespace std;

    int i = 100;
    int* p = &i;
    cout << p << "\n";
    cout << "Writing" << "\n";
    int* w = (int*)0x28ff18;
    *w = 101;
    cout << *p << "\n" << "Done";
    return 0;
}

取得したアドレスiは です0x28ff18ので、このアドレスを指定してその場所に書き込むことはできますか? 使用するのではなく*p = 101。明らかに、私が使用しているものはそれを変更しません。どこに書いているのか、または書いているのかわかりません101

簡単な説明やヘルプをいただければ幸いです。

4

3 に答える 3

4

ほとんどのコンピューターとほとんどのコンパイラーでは、このようなものがおそらく機能します。しかし、C++標準はこれについて何も保証しません。

たとえば、WindowsマシンでMSVC ++を使用してコードをコンパイルして実行した場合、アドレスが異なるたびに。同じプログラムの異なる実行間で同じになるとは期待できません。

また、ポインタ値を格納する整数は十分に大きくなければならないことに注意してください(たとえば、64ビットポインタがある場合は64ビット整数)。これを実行したい場合は、uintptr_tを使用してください(これを指摘してくれたlarsmansに感謝します)。

于 2012-05-30T15:48:16.697 に答える
3

のアドレスはi、プログラムの実行ごとに異なる場合があります。これは非常に危険です。これをしないでください。C++ でポインタの抽象化の背後にメモリ アドレスが隠されているのには理由があります。

メモリ アドレス リテラルが表示される唯一の場所は、非常に小さな組み込みシステムとオペレーティング システムのカーネル/ドライバーです。

于 2012-05-30T15:38:27.070 に答える
3

特定のメモリ位置に書き込むことは可能ですが、必ずしも安全であるとは限りません。

メモリ空間全体を所有する環境 (特に組み込みシステム) では、特定のメモリ アドレスに書き込み、メモリ マップド I/O 操作を実行するのが一般的です。オペレーティング環境がメモリ空間を制御している状況では、プログラムに割り当てられていないメモリへの書き込みは安全ではありません。

于 2012-05-30T15:39:05.540 に答える