首页 > 解决方案 > 使用/不使用 memcpy 在 C/C++ 中复制函数内部的结构

问题描述

void func(struct a* para) 
{
  struct b *alpha;
  memcpy(&alpha, para, sizeof(para));
  new_func(&alpha); //because this requires struct of type b
}

我在这里错过任何类型的初始化吗?我也试过“struct b *alpha {}”。有没有其他方法可以复制函数内部的结构?如果不可取,​​那么有人可以告诉我如何使用 memcpy 方法吗?

我的设备引发了总线错误,并且由于未初始化或某些与内存相关的问题,我之前已经观察到此错误。

编辑:
结构 a 和结构 b 是相同的
struct a
{

char alpha;
int beta;

}

标签: c++

解决方案


您正在通过未初始化的指针复制数据,而指针本身太小,所以它会爆炸。一个简单的修复:

b alpha; // struct prefix not necessary in C++

// Note sizeof(a) not sizeof(a*)
memcpy(&alpha, para, sizeof(a));

// Presuming this takes b* arg, not b** arg as your code implies
new_func(&alpha);

请注意,如果new_func保留该指针,它将在即时func退出时失效。

如果这一切只是传递一种类型的东西,但您希望它是另一种类型,那么只需使用static_cast并省去所有这些麻烦:

new_func(static_cast<b*>(para));

推荐阅读