VS2019下C++用变量定义二维矩阵报常量值要求错误咨询
错误原因
C标准语法要求,普通栈上数组的长度必须是编译期就能确定的常量,不能是运行时才会确定值的普通变量。你代码中使用的“用运行时变量指定数组长度”的写法属于C99标准引入的变长数组特性,只有部分C编译器(比如GCC)做了扩展支持,VS2019默认遵循标准C++规范,没有兼容该特性,所以int v[DIM][DIM];这一行会触发编译报错,提示你需要传入常量值。
可变长度矩阵的实现方案
- 优先使用STL的vector嵌套实现
这是最常用也最安全的方案,不需要手动管理内存,语法也简洁,示例代码如下:
#include <iostream> #include <vector> using namespace std; int main() { cout << "Inserisci la dimensione della matrice:"; int DIM; cin >> DIM; // 构造一个DIM行、DIM列的二维数组,元素默认初始化为0 vector<vector<int>> v(DIM, vector<int>(DIM, 0)); // 后续可以直接和普通数组一样用下标访问,比如v[1][2] = 5; return 0; }
- 手动动态申请内存实现
如果有特殊场景不能使用vector,可以用new关键字手动申请堆内存,用完需要手动释放避免内存泄漏,示例代码如下:
#include <iostream> using namespace std; int main() { cout << "Inserisci la dimensione della matrice:"; int DIM; cin >> DIM; // 先申请存储每行首地址的指针数组 int** v = new int*[DIM]; for (int i = 0; i < DIM; ++i) { // 为每一行申请对应长度的int数组,末尾加()会自动将元素初始化为0 v[i] = new int[DIM](); } // 使用逻辑和普通二维数组一致 // 使用完毕后释放内存,释放顺序和申请顺序相反 for (int i = 0; i < DIM; ++i) { delete[] v[i]; } delete[] v; return 0; }
内容的提问来源于stack exchange,提问作者Davide Borrello
相关产品推荐
相关产品推荐

