【发布时间】:2015-08-02 19:16:09
【问题描述】:
考虑以下情况。
我有一个void * first 指向一定数量的内存。我还有另一个 void * second 指向别的东西。我想将void * second 保存在第一个指针指向的内存中。
我的做法:
*(void**) first = second;
这有效吗?有什么需要考虑的预防措施吗?
【问题讨论】:
-
是否要将数据从第二个区域复制到第一个区域?
-
不,它不会那样做。很可能你想要
memcpy(first, second, the_size);。 -
我想把第二个区的地址存到第一个区。
-
@TheParamagneticCroissant 虽然我同意
memcpy在这里可能是一个更好的主意,但我不太明白您所说的“它不会那样做”是什么意思。考虑using T = void*; T m; T* pm = &m; void* first = pm; *((T*)first) = second; -
这有点奇怪,老实说我不明白你为什么要这么做。您可能应该使用
static_cast而不是 C 风格的强制转换,但这也有效,还要确保您正在访问对齐良好的内存(例如,如果您从std::malloc分配了 9 个字节,其地址存储在 @ 987654332@,您不能安全地将void*存储在地址p+1)。