0

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

struct MyType
{
  float *data;
}

还有一个为数据分配一些内存的初始化函数:

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 和堆栈变量之间来回更改决定了它是否有效,所以我怀疑问题出在某个地方。

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

4

1 回答 1

6

从为时已晚的评论中:

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

就是这样了。C++ 中不能有可变长度数组 (VLA)。这是 C99 的功能。

于 2013-04-18T20:17:46.200 回答