这个让我难过。如果我有一个结构:
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和堆栈变量之间来回切换决定它是否有效,所以我怀疑问题出现在某处。
我的问题是:我所做的一切都是合法的,应该是有效还是我做了明显错误的事情?我想使用堆栈变量,因此我可以在运行时从配置值定义数组大小。
答案 0 :(得分:6)
来自太晚的评论:
实际上我使用的是带有-std = c ++ 0x的g ++。所以我猜这是C ++
就是这样。您不能在C ++中使用可变长度数组(VLA)。这是C99功能。