gpt4 book ai didi

c - 从堆栈变量定义具有大小的数组

转载 作者:太空宇宙 更新时间:2023-11-04 05:41:55 27 4
gpt4 key购买 nike

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

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

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

最佳答案

来自为时已晚的评论:

Actually I am using g++ with -std=c++0x. So I guess this is C++

就这样吧。在 C++ 中不能有可变长度数组 (VLA)。这是 C99 的特性。

关于c - 从堆栈变量定义具有大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16092130/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com