如何在Visual C ++中读取内存地址?

时间:2013-11-07 20:48:14

标签: c++ visual-c++

在ANSI C中我可以这样做:

const long *address = 0x00000002;  /* Example address */
printf("0x00000002 -> %ld", *address);

控制台将显示该内存地址的内容。但VC ++中的代码抛出:

  

错误C2440:'初始化':无法从'int'转换为'const long *'

是否存在从VC ++读取内存地址的本机方式,或者我必须调用API?

提前致谢。

2 个答案:

答案 0 :(得分:4)

您的地址表示为整数。您需要将其强制转换为适当类型的指针:

const long *address = reinterpret_cast<const long *>(0x00000002);

你需要在标准C ++中执行该演员表。我不确定为什么你认为在标准C ++中可以省略强制转换。

当然,当您运行代码时,您将遇到分段错误。

答案 1 :(得分:3)

要设置该地址,请使用类似

的演员表
const long* address = (const long*) 0x0000002;  // C style

const long* address = 
   reinterpret_cast<const long*>(0x000002); // C++ style

BTW,在大多数系统上,0x0000002不是有效地址(在应用程序的通常虚拟地址空间中)。请参阅virtual memory上的wikipage&amp; virtual address space