用C ++获取地址的内容

时间:2011-10-27 14:11:19

标签: c++ pointers memory-address

如果我没有指向它的指针,C ++中是否有可能获取内存中的地址内容,但我确实将地址本身作为uint_32

由于

修改

我正在写这些位置,并试图查看我的write()函数是否正常工作,所以我想手动从地址读取。上面提到的'内容'属于uint64_t类型,这是我尝试过的,但这给了我一个Segmentation Fault

uint64_t *contents = reinterpret_cast<uint64_t*>(start_address);
cout<< hex << "Contents: " << *contents << endl;

我在这里做错了什么?

5 个答案:

答案 0 :(得分:2)

不确定可移植性,但您可以使用reinterpret_cast<>。 e.g。

uint_32 adrs;
int *p = reinterpret_cast<int*>(adrs);  // int* should be 32-bit for portable code

答案 1 :(得分:1)

是的,但前提是地址在您的address space中(或者您在微控制器或内核空间中运行)。否则会导致seg故障。

只需将uint_32转换为int指针,然后取消引用它:

int contents = *((int*)uintAddress);

答案 2 :(得分:1)

是的,如果将此整数强制转换为指针,则可以:

SomeData value = *reinterpret_cast<SomeData*>(some_int);

但是你必须100%确定你的整数 是地址,否则可能会发生不好的事情。所以这被认为是不好的做法,通常都是黑客行为。

答案 3 :(得分:0)

您只需将其转换为指针和取消引用。

答案 4 :(得分:0)

C风格的变体:

uint_32 x = 0xc0de;
int *addr = (int*)x;
printf("Address %d contains %d", x, *addr);