【问题标题】:If I have an integer version of the address in memory of a particular block, how do I make a pointer to this?如果我在特定块的内存中有一个整数版本的地址,我如何创建一个指向它的指针?
【发布时间】:2012-01-24 04:29:53
【问题描述】:

我有一个先前的函数,它返回特定内存块的地址(类型 int)。我现在想将此块的特定数量的字节存储到另一个指针。我如何访问这个内存(假设我有它的地址的 int 版本),所以我可以正确调用 memcpy?我尝试将其转换为 void* 但这不起作用。

【问题讨论】:

  • 您应该使用 intptr_tstdint.h 而不是 int - 在大多数 64 位平台上,您的指针会在转换中丢失位,并且很可能会失效。
  • @ChrisLutz Bah 64 位。 4,194,304K 的内存对任何人来说都足够了。

标签: c


【解决方案1】:

“将其转换为void*”是正确的做法。

如果你有一个带有这个签名的函数:

int getmemaddr();

它返回一个内存地址,你需要这样做:

char mybuf[mybuflen];
memcpy(mybuf, (void*)getmemaddr(), mybuflen);

...之类的。

请注意,int 是 32 位,因此在 64 位系统上它不能表示任意内存地址。

【讨论】:

  • int 至少为 16 位,并且可以是任意多的实现位。但是,在大多数常见的 64 位架构以及几乎所有 32 位架构上,它都是 32 位的,这在将代码从 32 位移植到 64 位时可能会导致代码损坏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多