热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c/c++开发分享灵活数组成员不在结构错误结束时的原因是什么?

我想知道为什么我不断收到error:flexiblearraymembernotatendofstruct当我调用malloc时error:flexiblearraymembern

我想知道为什么我不断收到error: flexible array member not at end of struct当我调用malloc时error: flexible array member not at end of struct错误的error: flexible array member not at end of struct 。 我有一个带有可变长度数组的结构,我一直收到这个错误。

结构是,

 typedef struct { size_t N; double data[]; int label[]; } s_col; 

而对malloc的调用是,

 col = malloc(sizeof(s_col) + lc * (sizeof(double) + sizeof(int))); 

这是对malloc的正确调用吗?

    在结构中只能有一个灵活的数组成员,并且它必须始终是结构的最后一个成员。 换句话说,在这种情况下,在调用malloc之前就已经出错了,以至于没有办法正确地为这个结构调用malloc

    要做你想要的(相同数量的datalabel成员的数组),你可以考虑这样的事情:

     struct my_pair { double data; int label; }; typedef struct { size_t N; struct my_pair data_label[]; }; 

    请注意,这有点不同:它不是一个double的数组,后跟一个int数组,它给你一个数组,一个double后跟一个int ,然后是下一个double ,next int ,依此类推。 这是否足够接近相同或者取决于你如何使用数据(例如,为了传递到需要连续数组的外部函数,你可能不得不以不同的方式做事)。

     typedef struct { size_t N; double data[]; int label[]; } s_col; 

    中间不能有灵活的数组成员( double data[] )。 考虑硬编码数组大小或double *data

    给定结构定义和指向结构开头的指针,C编译器必须能够访问结构的任何成员而无需访问任何其他内容。 由于结构内每个项目的位置由其前面的项目的数量和类型确定,因此访问任何项目需要知道所有在前项目的数量和类型。 在最后一项是数组的特定情况下,这没有特别的困难,因为访问数组中的项需要知道它的起始位置(这需要知道前面项的数量和类型,而不是数组中的项数本身)和项目索引(编译器可能假定它小于空间存在的项目数,而不必知道有关数组大小的任何信息)。 但是,如果一个Flexible Array成员出现在结构的末尾以外的任何地方,那么跟随它的任何项的位置将取决于数组中的项数 – 编译器不会知道。

    需要了解更多c/c++开发分享灵活数组成员不在结构错误结束时的原因是什么?,也可以关注C/ C++技术分享栏目—编程笔记

      以上就是c/c++开发分享灵活数组成员不在结构错误结束时的原因是什么?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(编程笔记)。


      推荐阅读
      • 如何用UE4制作2D游戏文档——计算篇
        篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
      • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
      • Go语言实现堆排序的详细教程
        本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
      • Java中包装类的设计原因以及操作方法
        本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
      • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
      • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
      • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
      • 给定一个二维平面上的一些点,通过计算曼哈顿距离,求连接所有点的最小总费用。只有任意两点之间有且仅有一条简单路径时,才认为所有点都已连接。给出了几个示例并给出了对应的输出。 ... [详细]
      • C# 7.0 新特性:基于Tuple的“多”返回值方法
        本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
      • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
      • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
      • JDK源码学习之HashTable(附带面试题)的学习笔记
        本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
      • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
      • 本文介绍了一种图的存储和遍历方法——链式前向星法,该方法在存储带边权的图时时间效率比vector略高且节省空间。然而,链式前向星法存图的最大问题是对一个点的出边进行排序去重不容易,但在平行边无所谓的情况下选择这个方法是非常明智的。文章还提及了图中搜索树的父子关系一般不是很重要,同时给出了相应的代码示例。 ... [详细]
      • 深入解析Linux下的I/O多路转接epoll技术
        本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
      author-avatar
      mobiledu2502914997
      这个家伙很懒,什么也没留下!
      PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
      Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有