从堆栈变量定义大小的数组

时间:2013-04-18 20:07:55

标签: c

这个让我难过。如果我有一个结构:

struct MyType
{
  float *data;
}

一个init函数为数据分配一些内存:

void init(MyType *s, int length)
{
  s->data = (float *)malloc(length*sizeof(float));
}

如果我使用#define声明一个MyType数组,它会按预期工作:

#define NUM_ELEMENTS 10
MyType myArr[NUM_ELEMENTS];
for (int i=0; i<NUM_ELEMENTS; i++)
{
  init(&myArr[i], 1000);
}

但是,如果我使用堆栈上的变量声明数组,我会遇到奇怪的行为:

int numElements = 10;
MyType myArr[numElements];
...

如果没有详细介绍更多我认为会让事情混淆的代码,很难解释行为是什么。我知道在#define和堆栈变量之间来回切换决定它是否有效,所以我怀疑问题出现在某处。

我的问题是:我所做的一切都是合法的,应该是有效还是我做了明显错误的事情?我想使用堆栈变量,因此我可以在运行时从配置值定义数组大小。

1 个答案:

答案 0 :(得分:6)

来自太晚的评论:

  

实际上我使用的是带有-std = c ++ 0x的g ++。所以我猜这是C ++

就是这样。您不能在C ++中使用可变长度数组(VLA)。这是C99功能。