在不指定大小的情况下分配数组

时间:2014-11-16 13:12:02

标签: c++ arrays language-lawyer new-operator

以下结构是否符合C ++标准,以及在此声明之后我可以用arr做什么?

char* arr = new char[];

提前致谢。

2 个答案:

答案 0 :(得分:5)

不,这是不允许的。 [expr.new] / 1中 new-expression 的语法指定

  

noptr-new-declarator
[ 表达式 ] attribute-specifier-seq opt
noptr-new-declarator [ constant-expression ] attribute-specifier-seq 选择

显然,代码中的括号之间没有表达式。它也没有意义:你怎么能分配一个未知长度的数组呢?

如果您需要一个动态更改大小的数组,请使用std::vector

答案 1 :(得分:1)

C ++编译器offen定义扩展允许声明size = 0的数组。通常,它可以用于声明结构中的最后一个字段,以便在结构分配期间选择此类数组的长度。

struct A
{
    float something;
    char arr[];
};

因此,如果您想分配这样的A,让我们说arr有7个元素,那么你可以:

A* p = (A*)malloc( sizeof(A) + sizeof(char)*7) ;

你应该注意sizeof(A)等于sizeof(float),所以对于编译器你的arr字段是0大小。

现在您可以使用最多7个索引的arr字段:

p->arr[3]='d';