如何将int*写入char[]?恢复指针时地址错误的问题排查
问题分析与解决
1. 初始代码的笔误
你的第一段代码存在未定义变量的错误:
int* ref_on_var = &a;
这里的a并未定义,你实际应该是想取some_var的地址,正确写法为:
int* ref_on_var = &some_var;
2. 指针恢复的逻辑错误
你恢复指针时直接将arr强转为int*,这是核心问题。arr是char数组,你之前把ref_on_var的字节内容写入了arr,也就是说arr里存储的是指针变量ref_on_var的值(即&some_var这个地址)。而reinterpret_cast<int*>(arr)是把arr数组自身的地址当成了int*,这显然不是你需要的结果。
正确的恢复方式
有两种可靠的实现方法:
方法一:使用memcpy
直接把arr中的字节内容拷贝到一个int*变量中:
int* get = nullptr; memcpy(&get, arr, sizeof(int*));
方法二:强转后解引用
把arr的地址强转为指向int*的常量指针,再通过解引用获取存储的指针值:
int* get = *reinterpret_cast<int* const*>(arr);
补充优化建议
你用循环逐字节拷贝的方式是合法的,但更简洁可靠的写法是直接用memcpy完成写入操作:
memcpy(arr, &ref_on_var, sizeof(int*));
既避免了手动循环的繁琐,也减少了出错概率。
内容的提问来源于stack exchange,提问作者iihaarr
相关产品推荐
相关产品推荐

