c++ - 在 VC++ 中创建没有 "new"的动态数组

标签 c++ arrays

我想在 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/

相关文章:

python - 如何存储一系列时间序列数据,包括元数据

c - 从字符串中删除前几个字符

c++ - CMake 无法在 CLion 中链接 libxml2

c++ - 在 C++ 中检查数组的顺序

c++ - 模板参数的默认参数可以专门化吗?

c++ - 构造一个 unordered_map,值为一对字符串和对象类型

c++ - c++ 可以创建指向从 dll 动态加载的不同类的指针数组吗?

arrays - 在工作表列中查找数组值

c++ - 如何在 C++ 中获取指向 char[] 的指针的内存地址

java - 生成累积频率数但从 0 开始