c++结构中的运行时大小的数组
Run-time sized array in a c++ struct
在C(使用gcc)中,我曾经有一些数据结构是一个带有一些额外信息的数组:
struct song {
uint tempo;
uint key;
note play[0]; // or play[] depending on compiler flavour
};
Iirc,被称为"灵活阵列"(http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero-长度)然后,我可以在运行时用malloc(sizeof(song)+N*sizeof(note))
分配一首N个音符的歌曲。如果我这次不打算使用向量,也不打算在song
中引入无用的note*
指针,那么g++在多大程度上支持这一点?
即使在C中,这也是未定义的且不可移植的。GCC在知情的情况下允许您逃脱惩罚,但其他实现可能不会。这是因为您正在访问超出其边界的数组。
这个"技巧"在C++中和在C中一样有效。也就是说,在GCC文档中表示支持的GCC中可以随意使用它,但它永远不会是"定义明确、有效的C++"。
除了使用固定长度或注释之外,没有其他方法*因为编译器必须知道你的歌曲结构有多长,而且每个结构都有相同的长度。
所以你必须使用一个音符*或一个向量
相关文章:
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- 基于数组的列表 - 动态数组创建时出错
- For 循环在尝试读取数组 c++ 时程序崩溃
- 蝴蝶代码 88.合并排序数组 c++ 运行时错误
- 使用指针访问数组元素时出现意外结果
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 如何将数组传递给函数,以便在更改该函数中的数组值时原始数组的值不会更改?
- 当将多个TypedArrayContents数组加载到V8数组中时(数组数组)时,最后一个元素将覆盖所有元素
- 排列程序无法写入数组 - 运行时错误
- 当我使用 += 将数字添加到数组中时,无论数字是什么,它总是以 0 结束
- 返回矢量数组 c++ 时出现问题
- 重载常量和非常量转换运算符返回数组类型时出现 MSVC 错误 C2593
- 当我超载数组运算符时,为什么我的私有变量等于零
- 覆盖数组元素时如何调用构造函数
- 2d 数组运行时错误 "std::bad_alloc()" what()
- C++2d数组运行时错误
- 尝试将数据保存到数组中时出现ifstream运行时错误
- 我认为做而正在进入无限循环.或数组.(运行时错误)
- 数组运行时错误
- 数组运行时错误