我很难理解为什么在我已经在另一个函数中初始化全局二维数组后,我无法在我的主函数中访问它。
编辑:忘记指定 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--;
}
}
因此,当我尝试访问 main()
中的 board[0][0]
时,我收到“0x00000000 处的访问冲突”消息。
我进入调试并看到 board[0][0]
在 main()
中被调用时指向 0x000000
但如果我尝试调用它在 init()
函数中,例如最后,它完美地工作,我可以访问任何变量。
最佳答案
您正在创建一个新的临时变量:
int **board = new int*[d];
这是一个内存泄漏,您无法在函数之后访问内存。你可以这样做:
board = new int*[d]; //remember to delete []!
我看到你已经标记了你的问题 [c++]。如果是这种情况,您应该使用标准库而不是处理原始指针。我想到了 std::vector
和 std::array
。
关于c++ - 在另一个函数中初始化后无法访问 main 中的全局数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24442875/