在我已经在另一个函数中初始化它之后,我很难理解为什么我无法在我的main函数中访问我的全局2D数组。
编辑:忘了指定d
是在所有这些之前声明的已知int变量,通常是3或4。
void init();
int **board;
int main(){
init();
cout << board[0][0];
}
void init(){
int **board = new int*[d];
for (int i = 0; i < d; i++){
board[i] = new int[d];
}
int n=d*d;
for (int i = 0; i < d; i++){
for (int j = 0; j < d; j++){
board[i][j] = n;
n--;
}
}
因此,当我尝试访问board[0][0]
中的main()
时,我收到了“0x00000000处的访问冲突”。
我进入调试时看到board[0][0]
在0x000000
中被调用时指向main()
,但如果我尝试在init()
函数中调用它,例如,最后效果很好,我可以访问任何变量。
答案 0 :(得分:2)
您正在创建一个新的临时变量:
int **board = new int*[d];
这是内存泄漏,您无法在该功能后访问内存。你可以这样做:
board = new int*[d]; //remember to delete []!
我看到你标记了你的问题[c ++]。如果是这种情况,您应该使用标准库而不是处理原始指针。想到std::vector
和std::array
。
答案 1 :(得分:0)
void init(){
int **board = new int*[d];
在这里,您要在函数中定义本地变量board
,该变量会阻止全局变量board
。
相反,直接指定值,不要定义另一个变量:
void init(){
board = new int*[d];