c++ - 如果我可以创建一个数组,为什么我需要动态内存分配?
问题描述
我正在阅读有关动态内存分配和静态内存分配的信息,并发现以下有关动态内存分配的信息:
在前面章节中看到的程序中,所有内存需求都是在程序执行之前通过定义所需的变量来确定的。但是可能存在程序的内存需求只能在运行时确定的情况。例如,何时需要的内存取决于用户输入。
所以我用 C++ 编写了以下程序:
#include <iostream>
int main()
{
int n = 0;
int i = 0;
std::cout << "Enter size: ";
std::cin >> n;
int vector[n];
for (i=0; i<n; i++)
{
vector[i] = i;
}
return 0;
}
这个程序有效。我不明白它是如何工作的。这里的大小是什么时候确定的?在这种情况下如何分配向量?
解决方案
据此(强调我的):
ISO C99 允许可变长度自动数组,作为扩展,GCC 在 C90 模式和 C++ 中接受它们。这些数组的声明与任何其他自动数组一样,但其长度不是常量表达式。存储在声明点分配,并在包含声明的块范围退出时释放。
请注意,这只是一个扩展,不适用于每个编译器,例如它在 MSVC 中对我不起作用(我收到错误“表达式必须具有常量值”)。
推荐阅读
- ios - 可以访问最后一张 Face ID 图像的 iOS 代码吗?
- c - 尽管使用 float 数据类型,乘法始终会导致 0
- reactjs - Redux Action Creator 和 Dispatch 与语法混淆
- javascript - 机器人计算自己的反应 discord.js
- python - 如何减少python中稀疏向量的尺寸?
- python - 我可以在 PyTest 日志输出中抑制“实时日志调用”分隔符吗?
- python - 名称“create_dm”未定义
- node.js - Socket.io 发出导致内存稳定增加
- c - 通过引用调用函数后是否必须返回指针?
- c# - 元素名称或类型作为 System.Xml.Serialization 中 XmlElementAttribute 的参数