【发布时间】:2013-05-28 21:43:56
【问题描述】:
例如,我有一个 char ** 数组,它有 3 个指针。 比方说:
array[0] has abc (points to "a", which lives in address 0x80033de0)
array[1] has def (points to "d", which lives in address 0x80033d)
array[2] has NULL
假设我已将数组字符串复制到不同的内存位置
0x7ffffff8 has abc (points to "a")
0x7ffffffc has def (points to "d")
如何更改 array[0] 使其指向 0x7ffffff8 而不是 0x80033de0?
还有 array[1] 指向 0x7ffffffc 而不是 0x80033d?
我已经尝试过不同类型的投射,但无法让它发挥作用。
编辑:
感谢大家看我的问题。我问这个的原因是因为我正在使用内核,我需要将参数从内核空间复制到用户空间。我想我可以通过将 arg 字符串复制到用户空间然后更改原始 args 指针在内核空间中指向的内存地址来做到这一点。我想这不是一个好主意。
【问题讨论】:
-
你试过什么?你应该能够做到
array[0] = (char*)0x7FFFFFF8 -
“我已经尝试过不同类型的投射,但无法让它发挥作用。” - 然后向我们展示代码和错误。
-
你实际上想做什么?您想拥有
char**的深层副本吗?你想拥有复制感知结构吗?请多解释一下。 -
到目前为止的两个答案都假设
0x7ffffff8有一定的意义;我怀疑情况是否如此。描述你想要做什么,而不是展示具有特定无意义内存地址的示例。
标签: c pointers memory memory-management