c++ - 使用/不使用 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;
}
解决方案
您正在通过未初始化的指针复制数据,而指针本身太小,所以它会爆炸。一个简单的修复:
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));
推荐阅读
- python - cvxpy 正在解决产生空答案
- ios - 如何在swift中执行SQL where In查询并绑定语句中的参数?
- javascript - Discord.js 在事件处理程序上关闭未处理的承诺拒绝
- python - Spotify Web API 未检测到 POST 请求的正文
- python - Selenium Web Scraping find_element_by_xpath 总是捕获会话字符串
- generics - F# 部分应用程序函数包装器不保留参数函数的返回类型泛型
- javascript - Puppeteer - do while,搜索后选择上一个标签
- kubernetes - 配置后 Kubernetes 仪表板不工作
- flutter - 为什么 DropdownButton nullcheck 失败?
- python-3.x - 如何正确地将 webdriver 的位置添加到系统的 PATH?