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

标签 c++ arrays pointers

我很难理解为什么在我已经在另一个函数中初始化全局二维数组后,我无法在我的主函数中访问它。 编辑:忘记指定 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

关于c++ - 在另一个函数中初始化后无法访问 main 中的全局数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24442875/

相关文章:

c++ - 从静态函数调用非静态变量

c# - 将图像转换为要绘制的线条数组

c++ - 无法访问类变量

php - 如何使用 LEFT JOIN mysql 查询轻松分割 PHP 中的结果?

javascript - 从数组中的 SQL 捕获 PHP 变量并输出到 JavaScript 变量

c - 初始化指针到指针而不丢失保留内存

c++ - 指向结构的指针的成员访问语法

c++ - 捕获 C++ 访问冲突异常

c - 如何在 C 中将连续数组作为参数传递?

javascript - 为什么 i^=j^=i^=j 不等于 *i^=*j^=*i^=*j