-
6 votesanswersviews
使用灵活的数组成员分配struct
这是C99代码: typedef struct expr_t { int n_children; foo data; // Maybe whatever type with unknown alignment struct expr_t *children[]; } expr_t; 现在,我该如何分配内存? expr_t *e = malloc (sizeof (exp... -
63 votesanswersviews
在C练习中使用灵活的阵列成员?
我最近读到在C中使用灵活的阵列成员是糟糕的软件工程实践 . 但是,该声明没有任何论据支持 . 这是公认的事实吗? (Flexible array members是C99中引入的C特性,其中可以将最后一个元素声明为未指定大小的数组 . 例如:) struct header { size_t len; unsigned char data[]; }; -
1 votesanswersviews
创建大小为零的灵活数组成员是否合法?
C99标准允许创建灵活的阵列成员,例如 typedef struct pstring { size_t length; char string[]; } pstring; 然后用 pstring* s = malloc(sizeof(pstring) + len) 之类的东西初始化它 . 是否允许 len 为零?它似乎是一致的,并且不时会节省空间(当然可能不是用 pstring 示例... -
17 votesanswersviews
如何使用灵活的数组成员初始化结构
我有以下结构 typedef struct _person { int age; char sex; char name[]; }person; 关于如何创建实例并使用灵活的数组成员初始化结构而不使用 malloc() ,我已经完成了一些基本的互联网搜索(但不成功) . 例如:对于普通结构,如 struct a { int age; int sex; }... -
1 votesanswersviews
使用灵活阵列成员的奇怪行为
我尝试使用更容易接受的习惯用一个灵活的数组成员替换结构的void *成员: typedef struct Entry { int counter; //void* block2; // This used to be what I had unsigned char block[1]; } 然后我将条目添加到连续的内存块中: void *memPtr = mmap(NUL... -
3 votesanswersviews
可变长度阵列和柔性阵列成员之间有什么区别?
我在ISO C99 committee draft中看到结构可能有一个不完整的数组,其大小未指定,称为Flexible Array Member . 另一方面,C99还具有可变长度数组,允许在编译时声明大小不恒定的数组 . 我认为FAM是一种特殊的VLA,但我看到两个SO用户声称不然 . 另外,阅读Wikipedia section on sizeof,它表示 sizeof 对于那两个表现不同 .... -
3 votesanswersviews
union是否支持灵活的阵列成员?
我在联合中声明了一个灵活的数组成员,如下所示: #include <stdio.h> union ut { int i; int a[]; // flexible array member }; int main(void) { union ut s; return 0; } 和编译器给出一个错误: source_file.c:8:9: erro... -
5 votesanswersviews
如何分区和使用与Rust一起分配的堆内存?
我最近在Rust上读了很多,但我仍然只是开始氧化 . 我的大脑保留了大部分的C / C反应,所以请原谅我,如果这个问题不相关,因为Rust的工作方式如何 . 通常是否可能(希望?)在堆上分配任意大小的块,然后在其上映射数据结构,并使用较小块内存的绑定? 使用C99,人们可以这样写: typedef unsigned char BYTE; typedef struct { size_t s... -
5 votesanswersviews
C结构中的柔性阵列构件
引自C-std部分6.7.2.1, struct s { int n; double d[]; }; 这是一个有效的结构声明 . 我正在寻找这种语法的一些实际用途 . 确切地说,这个构造如何比保持double *作为第二个元素更强或更弱?或者这是“你可以做多种方式”的另一种情况吗? Arpan