我想在 Visual Studio 中创建一个数组,因为它在 C99 中是可能的:
int function(int N)
{
int x[N];
return 1;
};
但是即使是VS2013也不支持这个。是否有另一种方法(除了使用 new 和 delete)来创建 x
而无需在翻译时修复 N?
非常感谢!
最佳答案
在 C++ 中执行此操作的宽恕方法是使用 vector
#include <vector>
int function(int N)
{
std::vector<int> x(N);
return 1;
};
如果您知道 N 不会很大(并且因为您似乎希望栈上有此内存,无论如何),您可以使用 _alloca
,这是一个 C 函数。请参阅文档 here .
#include <malloc.h>
int function(int N)
{
int *x = _alloca(sizeof(int)*N);
return 1;
};
这不是真正推荐的,已被 _malloca
取代,这需要在您处理完内存后调用 _freea
。
请注意,两个版本都会在函数退出时释放内存,但第一个版本将在堆上分配内存,而第二个版本将在堆栈上分配(因此对 N< 有更严格的上限
)。除了 std::vector
类的便利性和低开销之外,在 C++ 程序中使用 C 风格的指针无论如何都是一种令人沮丧的做法。 :)
关于c++ - 在 VC++ 中创建没有 "new"的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19794887/