这个让我难住了。如果我有一个结构:
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 和堆栈变量之间来回更改决定了它是否有效,所以我怀疑问题出在某个地方。
我的问题是:我所做的一切都是合法的,它应该起作用还是我做的事情明显是错误的?我想使用堆栈变量,以便可以在运行时从配置值定义数组大小。