当我制作结构的浅表副本时,灵活的数组成员不会被复制

2024-03-30

我通过以下方式对结构进行了浅复制:

struct Student{
        char *name;
        int age;
        Courses *list;  //First course (node)
        Student *friends[];   //Flexible array member stores other student pointers
    }Student;

void shallowCopy(const Student *one){
    Student *oneCopy = malloc(sizeof(one) + 20*sizeof(Student*));

    *oneCopy = *one;     <--------------- ERROR POINTS TO THIS LINE
}

当我检查灵活数组成员的第一个元素时oneCopy,为空。但是,如果我检查原始结构中灵活数组成员的第一个元素,它会成功打印出指针。原始结构的所有其他组件都被复制,例如名称和链接列表。只有灵活数组成员没有被复制。有谁知道我做错了什么?


有谁知道我做错了什么?

尝试使用赋值来复制具有灵活数组成员的结构。根据标准(6.7.2.1):

分配*s1 = *s2只复制成员n[IE。结构体中不是灵活数组的部分];如果任何数组元素在第一个元素内sizeof (struct s)结构的字节,它们可能会被复制或简单地用不确定的值覆盖。

基本上,当 C 编译器看到具有灵活数组成员的结构时,它不知道它到底有多大,因此它会将其视为足够大以容纳其他成员,再加上possibly多一点:

特别是,该结构的大小就像省略了柔性阵列成员一样,只是它可能具有比省略所暗示的更多的尾部填充。

就是这样sizeof(*one)是,并且that's当你这样做时复制的内容的大小*oneCopy = *one;.

自从你do显然知道整个结构的大小,以便malloc它,只需使用复制那么多字节memcpy。或者,如果您担心这在某种程度上无法移植(老实说我不确定),请完成作业,then使用循环复制每个元素one->friends to
oneCopy->friends.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我制作结构的浅表副本时,灵活的数组成员不会被复制 的相关文章

  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone

随机推荐

  • 使用drive api搜索文件夹内的文件

    驱动API https developers google com drive v2 reference files list https developers google com drive v2 reference files lis
  • Linux命令查找两个可比较的行

    我的数据按以下排序顺序排列 这里数据按照第一个 v1 然后是 v2 然后是 v3 然后是 v4 排序 v1 1 v2 8513481 v3 119330184 v4 0 v1 1 v2 8521383 v3 119330182 v4 0 v
  • Google 可视化 - 第 0 行的行类型无效

    我必须使用谷歌可视化在饼图上可视化 url json 数据 我的代码似乎是为了达到目的而必须的 但我在控制台中收到 第 0 行无效的行类型 错误 数据格式有问题吗 如果有人可以提供帮助 我们将不胜感激 这是我的代码 PHP
  • 使用列表、片段和地图实现选项卡的最佳方式?

    我正在尝试将 iOS 应用程序 移植 到 Android 原始的 iOS 应用程序工作流程是 Tab 1 List1 gt Detail gt DetailMap Tab 2 List2 gt Detail gt DetailMap Tab
  • Bootstrap 3.0 应用程序不滚动

    我有一个非常基本的 Bootstrap AngularJS 应用程序 这个应用程序只是显示我从服务器返回的数据行 虽然所有数据都显示 但如果数据超出页面 我将无法向下滚动页面 我不明白为什么会发生这种情况 我的 HTML 看起来像这样
  • Flashvars 在页面重新加载时停止 Flash 影片重新加载

    我网站的每个页面上都有一个 Flash 横幅 我希望它在用户更改页面时继续播放而不是重新加载 我读到这可以使用 flashvars 来实现 但是 我已经有一段时间没有进行任何动作脚本了 我尝试查找教程但无济于事 有人可以指出我正确的方向吗
  • Python 的 CPU 火焰图

    布伦丹 格雷格的CPU 火焰图 http www brendangregg com FlameGraphs cpuflamegraphs html是一种基于调用堆栈可视化一段时间内 CPU 使用情况的方法 His FlameGraph gi
  • 如何在 Xamarin MAC 平台中更改选取器背景颜色

    将 Xamarin 库和 MAC 操作系统更新到最新系统后 在我的 Visual Studio 2017 中 面临选择器背景颜色和在 MAC 平台选择器中选择 聚焦的项目颜色的问题 填充多个值的选择器 打开选择器时无法设置背景颜色 并且所选
  • 安装 Visual Studio 2013 Update 4 后如何修复“无法加载“CheckAttributes”任务”错误

    安装 Update 4 后 我现在发现自己无法构建 甚至清理 任何解决方案 我不断得到 错误 1 无法从 CheckPathAttributes 任务加载 程序集 C Program Files x86 MSBuild Microsoft
  • Pandas read_csv dtype 指定除一列之外的所有列

    我有一个 CSV 文件 我想将其中的大部分值读取为字符串 但如果具有给定标题的列存在 我想将列读取为布尔值 因为 CSV 文件有很多列 所以我不想直接在每一列上指定数据类型并给出如下内容 data read csv sample csv d
  • 在运行时跟踪 java 应用程序

    我想在运行时跟踪 java 应用程序以记录并稍后分析其每个行为 是否有可能挂钩 java 应用程序来获取运行时信息 例如方法调用 带有参数和返回值 和对象的状态 即其属性及其值 我的目标是完全了解应用程序的行为以及它如何处理数据 如果您需要
  • 如何通过单击另一个用户控件的按钮在面板中添加用户控件?

    我有一个 panel1 2 个用户控件 uc1 和 uc2 uc1 已添加到面板中 uc1 有一个按钮UC1 当我单击该按钮时 我想隐藏 uc1 并显示有另一个按钮 UC2 的 uc2 通过单击按钮UC2 我想在面板中隐藏uc2并显示uc1
  • QueryDsl SQL - 左连接子查询

    我在用QueryDsl SQL我想要left join子查询 这是简单的查询SQL SELECT usr memberId payoutsBbf totalPyts FROM users usr LEFT JOIN SELECT pyt m
  • erlang中如何将中缀转换为后缀?

    我刚刚遇到这个帖子 https stackoverflow com questions 4621151 the shortest way to convert infix expressions to postfix rpn in c 相当
  • SQL Server - 实现序列

    我有一个系统 要求我在数据进入数据库之前拥有数据的 ID 我正在使用 GUID 但发现它们太大而无法证明其便利性 我现在正在尝试实现一个序列生成器 它基本上为给定的上下文保留一系列唯一的 ID 值 代码如下 ALTER PROCEDURE
  • Android 13 中的存储权限 - Flutter

    我正在使用读写权限来访问外部存储并获取权限 我正在使用权限处理程序包 AndroidManifest xml
  • 按因子拆分并组合成新列

    我有一个 sql 输出到 data frame 中 如下所示 dateTime resultMean SensorDescription 1 2009 01 09 21 35 00 7 134589 Aanderaa Optode Type
  • WooCommerce 自定义报告:获取具有已完成状态的订单

    我正在为 woocommerce 制作自定义报告我正在尝试为所有已交付订单添加报告 这就是我正在做的事情 orders wc get orders array numberposts gt 1 foreach orders as order
  • 是否可以在信号处理程序中设置承诺?

    我正在寻找一种方法来停止每 2 秒执行一次任务的线程 我决定尝试使用 std promise future 以便线程可以在设置 Promise 时立即退出 include
  • 当我制作结构的浅表副本时,灵活的数组成员不会被复制

    我通过以下方式对结构进行了浅复制 struct Student char name int age Courses list First course node Student friends Flexible array member s