问题标签 [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.
c - 收到以下警告:使用灵活数组成员传递结构的 ABI 在 GCC 4.4 中已更改
当我尝试运行我的程序时,我收到了这个警告和一些奇怪的错误。
rmi_pdu
在以下结构中包含我要访问的可变大小的数组。
问题是当我试图释放我动态分配的内存时。内容在那里,但free()
API 正在abort()
运行。这就是核心的样子
这就是分配的样子。想要使用 rmi 的调用者会将大小作为参数传递。
len
作为参数传递。
c - 使用灵活数组成员的奇怪行为
我尝试使用更接受的习语将结构的 void* 成员替换为灵活的数组成员:
然后我将条目添加到一个连续的内存块中:
像这样:
问题是一旦我需要它就解压这些数据。例如,如果我这样做:
这可能是有原因的吗?我不一定认为我在任何地方都踩着东西,它曾经与 void* 方法一起使用。奇怪的是,如果我将一个虚拟 void* 放回结构中,它就可以工作。如果我放入一个虚拟 int 它将不起作用。
编辑:实际上,如果number
inAddEntry
不是 0,它也会失败。我踩的是什么,如果有的话?
c - 灵活的数组成员(零长度数组)
参考GCC 的零长度数组解释:
这在结构是可变长度对象的标头的情况下特别有用。这正是我的情况。此外,我关心堆中结构的对齐方式。
在这种情况下,我仍然真的不明白零长度数组有什么用处。它们与这种特殊情况有什么关系?
编辑:
是不是我可以在里面放多少我想要的“数据”?
c - 在另一个结构中具有灵活数组成员的结构
下面的代码是否有效?
对我来说似乎没问题,但我有点怀疑,因为如果我这样做编译器不会抱怨:
c++ - 是否可以编写具有零长度数组成员的“完整”C++ 类?
我有一些数据类型,如果我使用普通的旧 C,将被实现为
我想做的,基本上是把它变成一个类,并添加常用的运算符,如less、equal、copy constructor、operator assignment等。正如您可以想象的那样,我将在std::map等关联容器中使用此类作为其key。
我需要缓冲区在理想情况下与对象本身处于同一级别,否则当我必须比较其中两个(缓冲区)时,我会让 CPU 获取指针并将其加载到内存中;我不想使用std::vector因为分配的内存不会与其余的数据成员连续。
对我来说主要问题是在C 语言中我会有一个函数,给定缓冲区的大小,它会为其分配适当的内存大小。在C++中,这样的事情是做不到的。
我对吗?干杯
c - 使用灵活的数组成员分配结构
这是 C99 代码:
现在,我该如何分配内存?
或者
?
甚至可以保证在sizeof
具有灵活数组成员的类型上工作(GCC 接受它)?
c - 零元素的数组需要什么?
在 Linux 内核代码中,我发现了以下我无法理解的内容。
代码在这里: http: //lxr.free-electrons.com/source/include/linux/ti_wilink_st.h
零元素数据数组的需求和目的是什么?
c++ - c++ 结构中的运行时大小的数组
在 C(使用 gcc)中,我曾经有一些数据结构是一个包含一些额外信息的数组:
Iirc,这被称为“灵活数组”(http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero-Lengthmalloc(sizeof(song)+N*sizeof(note))
),然后我可以在运行时分配一首包含 N 个音符的歌曲。如果我这次不打算使用向量,也不打算在中引入无用的note*
指针,那么 g++ 支持到什么程度song
?
c++ - 使用模板和基类实现灵活的数组成员
在 C99 中,您通常会看到以下模式:
但这不仅是糟糕的 C++,而且也是非法的。
您可以在 C++ 中实现类似的效果,如下所示:
虽然这会起作用(在 FooBase 的方法中,您可以访问var2[2]
,var2[3]
等),但它依赖于Foo
标准布局,这不是很漂亮。
这样做的好处是,非模板化函数可以通过采用 a和调用对 进行操作的方法来接收任何Foo*
内容而无需转换,并且内存都是连续的(这可能很有用)。FooBase*
var2
有没有更好的方法来实现这一点(这是合法的 C++/C++11/C++14)?
我对这两个微不足道的解决方案不感兴趣(包括基类中指向数组开头的额外指针,以及在堆上分配数组)。
c - 灵活的数组成员真的有必要吗?
显然,具有灵活数组成员的结构不打算被声明,而是与指向该结构的指针一起使用。声明一个灵活数组成员时,必须至少有一个其他成员,并且该灵活数组成员必须是该结构中的最后一个成员。
假设我有一个看起来像这样的:
然后要使用它,我必须声明一个指针并使用 malloc 为结构的内容保留内存。
也就是说,如果我希望我的 flm[] 数组保存五个整数。然后,我可以像这样使用我的结构:
我的问题是,我不应该只使用指针而不是这个吗?它不仅兼容 C99 之前的版本,而且我可以在有或没有指向该结构的指针的情况下使用它。考虑到我已经必须在 flm 中使用 malloc,难道我不应该这样做吗?
考虑一下示例结构的这个新定义;
我什至可以像灵活数组成员一样使用替换:
这也行吗?(用notflm提供了上面例子的定义)