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

时间:2014-06-27 02:00:22

标签: c++ arrays pointers

在我已经在另一个函数中初始化它之后,我很难理解为什么我无法在我的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()函数中调用它,例如,最后效果很好,我可以访问任何变量。

2 个答案:

答案 0 :(得分:2)

您正在创建一个新的临时变量:

int **board = new int*[d];

这是内存泄漏,您无法在该功能后访问内存。你可以这样做:

board = new int*[d]; //remember to delete []!

我看到你标记了你的问题[c ++]。如果是这种情况,您应该使用标准库而不是处理原始指针。想到std::vectorstd::array

答案 1 :(得分:0)

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

在这里,您要在函数中定义本地变量board,该变量会阻止全局变量board

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

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