You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:00:50