当我对结构进行浅拷贝时,灵活数组成员没有被复制

布兰登

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

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,它为null。但是,如果我在原始结构中检查了弹性数组成员的第一个元素,它将成功打印出指针。将复制原始结构的所有其他组件,例如名称和链接列表。只是不会复制灵活数组成员。有人知道我在做什么错吗?

霍布斯

有人知道我在做什么错吗?

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

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

基本上,当C编译器看到具有灵活数组成员的结构时,它不知道其实际大小,因此将其视为足以容纳其他成员的结构,并且可能还会容纳更多其他成员

特别地,该结构的尺寸就好像省略了柔性阵列构件,除了其可能具有比省略所暗示的更多的尾随填充。

这就是sizeof(*one)是,和的时候你做什么被复制的大小*oneCopy = *one;

既然你显然知道整个结构的大小,为了malloc它,只需复制多少字节使用memcpy或者,如果您担心这种方式难以携带(坦率地说,我不确定),请执行赋值操作,然后使用循环将每个元素从复制one->friends
oneCopy->friends

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么使用灵活的数组成员进行的结构初始化无效但对于固定大小的数组成员却有效?

来自分类Dev

具有灵活数组成员的结构的数组如何表现?

来自分类Dev

如何均匀地分配具有灵活数组成员的结构体数组?

来自分类Dev

嵌套结构中的灵活数组成员

来自分类Dev

是否允许返回具有灵活数组成员的结构?

来自分类Dev

从具有灵活数组成员的结构强制转换为没有该变量的其他结构是否是未定义的行为?

来自分类Dev

复制对象时如何复制Ruby数组成员?

来自分类Dev

使用数组并在结构中分配内存(灵活的数组成员)

来自分类Dev

具有弹性char数组成员的结构

来自分类Dev

返回具有数组成员的本地结构

来自分类Dev

没有初始化的C ++数组成员

来自分类Dev

可变长度数组和灵活数组成员之间有什么区别?

来自分类Dev

为什么灵活数组成员的静态初始化有效?

来自分类Dev

C ++中的灵活数组成员的可移植仿真?

来自分类Dev

在C中访问灵活数组成员

来自分类Dev

使用灵活的数组成员实现堆栈

来自分类Dev

灵活的数组成员,以访问联合原始字节

来自分类Dev

在C中,如何“直接”将结构复制到数组成员?

来自分类Dev

使用strcpy()对结构的char数组成员进行分段错误

来自分类Dev

使用strcpy()对结构的char数组成员进行分段错误

来自分类Dev

删除类的复制构造函数时,初始化类的数组成员

来自分类Dev

nodejs数组没有被复制?

来自分类Dev

我如何将私有数据与公共数组成员相关联?

来自分类Dev

类具有带动态数组成员的类

来自分类Dev

类具有带动态数组成员的类

来自分类Dev

循环访问所有数组成员

来自分类Dev

具有静态数组成员变量的迭代器

来自分类Dev

使用std :: index_sequence初始化具有固定大小数组成员的POD结构容器

来自分类Dev

struct中的char数组成员-复制到这两个成员的值

Related 相关文章

  1. 1

    为什么使用灵活的数组成员进行的结构初始化无效但对于固定大小的数组成员却有效?

  2. 2

    具有灵活数组成员的结构的数组如何表现?

  3. 3

    如何均匀地分配具有灵活数组成员的结构体数组?

  4. 4

    嵌套结构中的灵活数组成员

  5. 5

    是否允许返回具有灵活数组成员的结构?

  6. 6

    从具有灵活数组成员的结构强制转换为没有该变量的其他结构是否是未定义的行为?

  7. 7

    复制对象时如何复制Ruby数组成员?

  8. 8

    使用数组并在结构中分配内存(灵活的数组成员)

  9. 9

    具有弹性char数组成员的结构

  10. 10

    返回具有数组成员的本地结构

  11. 11

    没有初始化的C ++数组成员

  12. 12

    可变长度数组和灵活数组成员之间有什么区别?

  13. 13

    为什么灵活数组成员的静态初始化有效?

  14. 14

    C ++中的灵活数组成员的可移植仿真?

  15. 15

    在C中访问灵活数组成员

  16. 16

    使用灵活的数组成员实现堆栈

  17. 17

    灵活的数组成员,以访问联合原始字节

  18. 18

    在C中,如何“直接”将结构复制到数组成员?

  19. 19

    使用strcpy()对结构的char数组成员进行分段错误

  20. 20

    使用strcpy()对结构的char数组成员进行分段错误

  21. 21

    删除类的复制构造函数时,初始化类的数组成员

  22. 22

    nodejs数组没有被复制?

  23. 23

    我如何将私有数据与公共数组成员相关联?

  24. 24

    类具有带动态数组成员的类

  25. 25

    类具有带动态数组成员的类

  26. 26

    循环访问所有数组成员

  27. 27

    具有静态数组成员变量的迭代器

  28. 28

    使用std :: index_sequence初始化具有固定大小数组成员的POD结构容器

  29. 29

    struct中的char数组成员-复制到这两个成员的值

热门标签

归档