在另一个函数中初始化后无法访问 main 中的全局数组

Cannot access global array in main after initializing in another function

本文关键字:main 访问 全局 数组 另一个 函数 初始化      更新时间:2023-10-16

我很难理解为什么我已经在另一个函数中初始化了我的全局 2D 数组后,我无法在我的主函数中访问我的全局 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--;
        }
    }

因此,当我尝试在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::vectorstd::array浮现在脑海中。

void init(){
    int **board = new int*[d];

在这里,您在阻止全局变量board的函数中定义一个局部变量board

相反,直接分配值,不要定义另一个变量:

void init(){
    board = new int*[d];