c++ - 为什么在输入 n 之前将数组的大小声明为 n,第一次有效,第二次无效?
问题描述
我正在解决一个问题,在输入 n 的值之前,我将数组的大小声明为 n,它适用于第一个测试用例,但不适用于第二个测试用例。为什么?
PS:我在网上找不到任何相关信息。
这是代码片段
int n,arr[n];
cin>>n;
解决方案
int n,arr[n];
cin>>n;
这试图定义一个 VLA(可变长度数组)。但是,VLA 不是 C++ 的一部分。
这可能支持作为编译器的扩展(例如g++
支持作为扩展)。在这种情况下,你仍然有问题。定义数组时,n
未初始化。所以它会触发未定义的行为。
在定义 VLAn
之前,您需要阅读:
int n;
std::cin >> n;
int arr[n];
请注意 VLA 是在stack上分配的。因此,如果n
值足够大,由于溢出(= 未定义的行为),您将有未定义的行为。因此,最好避免使用 VLA。你可以std::vector<int>
改用。
推荐阅读
- c# - Xamarin Android 布局将图像右对齐
- c++ - CMake:基于 Clang 的 Linux 交叉编译使用错误的目标平台
- python - 使用 matplotlib 和 geopandas 在地图上用不同的投影注释标签时遇到问题
- pytorch - Pytorch 用户对旧 GPU 的警告
- html - How to set color from API response in border-color in Angular?
- python - 按钮 tkinter python 周围的选择框
- node.js - 将图像字段添加到现有表单并将其上传并检索到 React.js+Node.js+MSSQL 应用程序中的数据库
- java - 有没有一种方法可以通过使用 Cursor 和 Uri 将歌曲导入其中来在 ListView 中播放歌曲?
- java - 为什么 Java Debugger 会随机进入内部方法?
- javascript - 如何将 blob 转换为 png 或 jpg?