问题标签 [flexible-array-member]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
58 浏览

c - 如何正确地将包含 int 数组的结构分配给结构数组?

我想知道如何将包含 int 数组的结构分配给结构数组。无论我想到什么新的解决方案,我都会得到不正确的结果。

我相信问题在于这段代码:

整个代码:

实际结果:

预期结果:

0 投票
1 回答
71 浏览

c - 用作具有灵活数组成员的结构数组的通用字符缓冲区

您不能拥有具有灵活数组成员的结构数组。

这是这个问题的 TL;DR 。仔细想想,这完全有道理。

但是,可以模拟一个具有灵活数组成员的结构数组 - 我们称它们为swfam -固定大小,如下所示:

这个技巧有效 C99 / C11 吗?我是否潜伏于未定义的行为?

0 投票
1 回答
491 浏览

c - 结构内部的 Realloc 动态数组

我有一个结构:

然后在函数中我试图创建子节点

问题是 realloc 给了我错误。

realloc():无效指针:

因此,如果它是 c++,我可以创建一个向量并推回元素,但是使用 c 我需要重新分配指针数组。如何重新分配内存?

0 投票
4 回答
1753 浏览

c - 在具有灵活数组的结构的初始化中使用 sizeof 运算符

我想声明一个带有灵活数组成员的结构,然后sizeof()在它上面使用。原型是:

然后我声明它:

一切都可以编译(GCC),但是当我检查test.length它时它的值为 2,即它只计算它uint16_t本身length

如何在编译时计算结构的大小?似乎编译器使用原型而不是特定实例。

0 投票
2 回答
817 浏览

c - 我可以通过为封闭结构分配更多空间来“过度扩展”数组吗?

坦率地说,这样的代码是有效的还是会产生 UB?

http://ideone.com/lpByQD

我从不认为它对这样的事情有效,但似乎 SystemV 消息队列正是这样做的:参见手册页

那么,如果 SysV 消息队列可以做到这一点,也许我也可以做到这一点?我想我会发现这对于通过网络发送数据很有用(因此是__attribute__((__packed__)))。

或者,也许这是 SysV 消息队列的特定保证,我不应该在其他地方做类似的事情?或者,也许可以使用这种技术,只是我做错了?我想我最好问问。

- 1malloc(sizeof(struct weird_struct) + sizeof(text) - 1)因为我考虑到无论如何都分配了一个字节,unsigned char value[1]所以我可以从sizeof(text).

0 投票
3 回答
831 浏览

c++ - 与 C++ 中的 C 灵活数组成员互操作的正确方法是什么?

我知道灵活的数组成员不是 C++11 标准的一部分。

那么,与来自 C++11 的具有灵活数组成员的结构返回或接受作为参数的 C 代码进行互操作的正确方法是什么?

我应该编写一个垫片,将灵活的数组成员从 C 结构映射到 C++ 中的指针吗?

0 投票
1 回答
429 浏览

c++ - 具有灵活阵列成员的打包结构的便携式替代方案

假设我们正在使用 UDP 套接字编写 C++ 网络应用程序。我们需要传递一个不那么小的数据包,所以我们使用了这种结构,确保字节顺序是网络顺序:

我们使用的是 GNU GCC,因此我们利用了非标准 C++ 功能,例如

  • 灵活的数组成员
  • 堆积结构

我们需要一个打包的结构,因为我们不希望在两者之间进行填充,因为这可能依赖于架构,并且我们的网络程序可能运行在不同的架构上。

然后,一年后,我们可能需要支持一个非 GCC 编译器,它不支持这些。

是否可以在标准 C++ 中执行此操作?

当然,我知道我们可以简单地uint8_t buffer[SOME_SIZE]对数据报的每个部分使用 a 和 memcpy,但这听起来是创建可怕、非常丑陋的代码的好方法。

0 投票
2 回答
798 浏览

c - 通过在一个结构之间转换指针来实现继承是否合法,该结构是另一个结构的子集而不是第一个成员?

struct现在我知道我可以通过将指向 a 的指针转换为 this 的第一个成员的类型来实现继承struct

然而,纯粹作为一种学习经验,我开始怀疑是否有可能以稍微不同的方式实现继承。

这段代码合法吗?

这段代码似乎产生了预期的结果,但正如我们所知,这远不能证明它不是 UB。

我怀疑这样的代码可能是合法的原因是我看不到这里可能出现的任何对齐问题。但当然,这远非知道不会出现此类问题,即使确实没有对齐问题,代码也可能由于任何其他原因仍然是 UB。

0 投票
3 回答
1913 浏览

c - 灵活的数组成员会导致未定义的行为吗?

  1. 通过在结构类型中使用灵活的数组成员(FAM),我们是否将我们的程序暴露于未定义行为的可能性?

  2. 一个程序是否有可能使用 FAM 并且仍然是一个严格遵守的程序?

  3. 灵活数组成员的偏移量是否需要位于结构的末尾?

这些问题适用于C99 (TC3)C11 (TC1)

输出:

0 投票
1 回答
1218 浏览

c++ - 具有灵活数组成员的结构的大小

给定

是什么sizeof(Foo)?它是实现定义的还是未定义的行为?C 与 C++ 的答案是否不同?