【发布时间】:2021-12-30 11:34:30
【问题描述】:
struct CustomData
{
char flag;
int count;
double value;
};
CustomData custom_data{};
char *buf = new char[sizeof(CustomData) + 3];
memcpy(buf + 3, &custom_data, sizeof(CustomData));
CustomData* ptr = (CustomData *)(buf + 3);
ptr->count = 10;
ptr->value = 20.0;
我有一个由一些标头字节和一个结构组成的内存缓冲区。该结构是此内存缓冲区的 memcpy。我必须修改这个嵌入结构中的一些字段,如上所示。
我的问题是:
-
这是 x86-64 上的安全访问吗?其他平台呢?
-
memcpy到本地结构,修改并复制回来肯定可以,但看起来很浪费。有没有办法检查ptr是否正确对齐以便安全访问结构?
【问题讨论】:
-
请选择一种语言
-
由于违反了严格的别名规则,此代码未根据 C(假设将
new替换为malloc)标准进行定义 -
@tstanisl: Per C 2018 6.5 6,动态分配内存并使用
memcpy填充数据或使用字符类型复制创建一个具有原始数据有效类型的对象。 -
@EricPostpischil,对,我对设置对象类型的
new产生了偏见。 -
@463035818_is_not_a_number 你的意思是它在 C 和 C++ 之间是不同的?我什至不知道有什么区别。
标签: c++ c struct memcpy memory-alignment