【问题标题】:Why does the C++ 'int arr[n];' such that n is variable works in one environment and doesn't work in another? [duplicate]为什么 C++ 'int arr[n];'这样 n 是变量在一种环境中工作而在另一种环境中不起作用? [复制]
【发布时间】:2021-02-27 06:34:58
【问题描述】:

当我输入时:

int n; 
cin >> n; 
int a[n]; 

它适用于 VS 代码,但不适用于 Visual Studio。

由于与内存有关的东西,我预计它根本不起作用。

那么,有什么解释为什么它可以在 VS 代码上工作吗?

【问题讨论】:

  • Editor 无所谓,重要的是编译器。它不是标准功能,因此不需要它工作。一些编译器允许它
  • “适用于 VS 代码”是什么意思? VS Code 是编辑器,而不是编译器。
  • 别这样。它不是标准的 C++。如果您需要运行时大小的数组,请使用std::vector
  • @jamesdlin 我检查了两种环境中的编译器设置。完全一样!

标签: c++ memory memory-leaks


【解决方案1】:

a[n] 是可变长度数组 (VLA),它是 C99 的一项功能。它不是 C++ 功能。一些 C++ 编译器也接受该语法作为编译器扩展。

【讨论】:

  • 本例中为数组分配的内存是属于栈还是栈?如果是堆,内存泄漏会按预期发生吗?我应该删除它吗?
  • 这取决于编译器。 gcc 在堆栈上分配它以及为什么它很危险。你不需要释放它。
猜你喜欢
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 2018-04-25
相关资源
最近更新 更多