在哪里创建动态大小数组?(堆叠或堆)
Where are dynamic size arrays created on? (stack or heap)
例如,我有一个基于用户输入的动态大小数组:
int n;
cin >> n;
int items[n];
这个数组是在堆栈上分配的吗?还是像我写的那样:
int n, *items;
cin >> n;
items = new int[n];
...
delete [] items;
编辑:我理解第二个代码的作用。我想问的是,第一个代码是否和第二个代码一样,但是行数更少。
您的第一个示例根本没有使用动态数组-它使用堆栈分配的可变长度数组(通常在幕后相当于alloca
调用,sizeof
操作符除外),这是C99的功能,而不是c++。
第二个数组当然是通过new.
您使用new
分配内存,因此您的数组存储在堆中
你的第一个代码块将无法编译,如果不使用new或malloc/calloc/realloc分配内存,你就不能分配一个动态大小的数组。
为了做你想做的事情,你需要做你在第二个块中所做的事情,它将始终分配在堆上。
Dynamic = Heap。非动态= Stack.
永远记得释放你的内存!
相关文章:
- 在c++中为double类型的数组创建一个unique_ptr
- 如何从预定义的数组创建某些元素数组
- 基于数组的列表 - 动态数组创建时出错
- 从 UTF-8 字节数组创建字符串?
- 是否可以在并行区域中为共享 2D 数组创建选定元素的线程本地副本?(共享,私有,障碍:OPenMP)
- C++ 从名称数组创建对象
- 从数组创建 Mat 时,'cv::Mat' 和 'int' 类型不兼容
- 从 std::数组创建十六进制代表
- 在 C++ 结构内声明的数组 A[1] 创建多个实例
- 为多维数组创建内存空间
- 如何使用任何类型的数组创建模板类并为其设置值?
- 从字符串数组创建一个字符数组
- 是否可以在不为该数组创建变量的情况下将数组作为参数传递到函数中?
- 使用类定义数组创建C++类
- 使用具有唯一随机数的结构数组创建多个对象
- 谷歌测试:无法从字符数组创建字符串
- 从 1D 数组创建 2D 数组
- 无法通过一个单向链表数组创建邻接列表
- 如何使用数组创建标准::函数
- 在C++中,返回从本地字符数组创建的字符串是否会导致内存泄漏或未定义的行为