我有一个名为 int **grid
的数组,它是在 Amazon::initGrid()
中设置的,并且是一个 [16][ 16]
网格与 新
。我将每个数组值设置为 0,然后将 [2][2]
设置为 32。现在,当我离开 initGrid()
并返回 getGrid() 时
它已经失去了值(value),现在是 0x0000。
我不知道该尝试什么,解决方案似乎非常简单,但我就是不明白。不知何故,数据没有保存在 g_amazon
中,但我可以发布代码。
// Returns a pointer to grid
int** Amazon::getGridVal()
{
char buf[100];
sprintf_s(buf, "Hello %d\n", grid[2][2]);
return grid;
}
int Amazon::initGrid()
{
int** grid = 0;
grid = new int* [16];
for (int i = 0; i < 16; i++)
{
grid[i] = new int[16];
for (int j = 0; j < 16; j++)
{
grid[i][j] = 0;
}
}
grid[2][2] = 32;
return 0;
}
int **grid;
g_amazon = Amazon::getInstance();
g_amazon->initGrid();
grid = g_amazon->getGridVal();
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 16; j++)
{
int index;
index = (width * 4 * i) + (4 * j);
int gridval;
gridval = grid[i][j];
lpBits[index] = gridval;
lpBits[index + 1] = gridval;
lpBits[index + 2] = gridval;
}
}
当我在 sprintf_s
打印出 [2][2]
的行运行它时它崩溃了,当我到达 gridval = grid 时它也崩溃了[i][j]
因为它位于内存位置 0x000000。
最佳答案
变量
int** grid
在initGrid()函数中是一个局部变量。编辑** 当函数返回时,变量从堆栈中弹出。但是,由于它是用 new 运算符声明的,因此内存仍然存在于堆上;它只是没有被您的全局网格变量指向。
关于c++ - 我的单例中的数组在离开函数后不保留信息,然后在尝试再次访问信息时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57732283/