我的代码:
#include <iostream>
using namespace std;
int main() {
int n=5;
int a[n][n];
a[1][1]=5;
return 0;
}
我试图在第6行的eclipse中观察表达式[1] [1]时出现此错误:
无法执行MI命令: -data-evaluate-expression a [1] [1]来自调试器后端的错误消息: 无法执行指针数学运算 不完整的类型,尝试转换为 已知类型,或无效*。
我猜它是从gdb返回的?但是,我不知道为什么我不能看到那个价值?是不是“一个”是一个正常的多维数组?
答案 0 :(得分:6)
由于一些奇怪的原因,除非你做到这一点,否则这不是有效的C ++
const int n = 5;
否则数组大小在运行时才正式未知。
答案 1 :(得分:4)
C ++不假设可变长度数组(VLA)。所以你的代码不是标准的符合代码。
如果使用g++ -pedantic
进行编译,则无法编译。数组大小必须是常量表达式。但是在你的代码中,它不是。
所以写:
const int n=5; //now this becomes constant!
int a[n][n]; //the size should be constant expression.
让我们尝试使用上面的代码,因为它现在是完全符合标准的代码。
答案 2 :(得分:0)
为什么不更好地做一个动态的2D阵列呢?在这种情况下,您不必使n保持不变,并且可以动态确定大小。
int **arr, n;
arr = new int * [n]; // allocate the 1st dimension. each location will hole one array
for (i=0; i<n; i++)
{
arr[i] = new int [n]; // allocate the 2nd dimension of one single n element array
// and assign it to the above allocated locations.
}
现在您可以访问aray arr[i][j]
自由反向
for (i=0; i<n; i++)
{
delete [] arr[i]; // first delete all the 2nd dimenstion (arr[i])
}
delete [] arr; // then delete the location arays which held the address of the above (arr)