c++ 数组和内存出错

Error with c++ Arrays and Memory

本文关键字:出错 内存 数组 c++      更新时间:2023-10-16

我一直在努力将我创建的批处理游戏转换为 c++ 以进一步发展,并遇到了许多问题,其中之一是我需要的 nodeMatrix(世界地图)数组。我需要一张 100 x 100 的地图,每米有 20 个数据值。

 int nodeMatrix[99][99][19];

但是它的问题是当我尝试设置地图的 null(或未生成)状态时,它崩溃并显示 (0xC0000005),所以我在脚本中添加了一个视觉对象打印正在重置的当前节点(虽然速度要慢得多),

void emptydata(){
  int temp_x = 0;
  int temp_y = 0;
  int temp_t = 0;
  do{
     temp_y = 0;
     do{
         temp_t = 0;
         do{
             nodeMatrix[temp_x][temp_y][temp_t] = 0;
             //visual
             cout << temp_x << " " << temp_y << " " << temp_t << endl;
             temp_t ++;
         }while(temp_t <= 50);
         temp_y ++;
     }while(temp_y <= 99);
     temp_x ++;
 }while(temp_x <= 99);
}

每次在 99 14 10 处崩溃,(它从零开始,所以 100 15 11),那会是 16500 次叮咬数据吗?

无论如何,它是内存分配的东西吗?我想不通。

听起来您的问题是您分配了一个 99 x 99 x 19 的数组,而不是 100 x 100 x 20 的数组。数组声明采用元素的数量,而不是最大索引。

我不确定您是如何达到 temp_y = 14 和 temp_t = 10 的,但这似乎可以通过它在 temp_x = 99 时崩溃的事实得到证实。

如果您发布该实际错误消息,它将更有帮助。


看来你也把temp_t限制在50个,而不是20个,但我认为这是一个错字。此外,作为风格说明,for 循环在 c++ 中更常见,因为它们将为您处理索引。

你的定义是 [99][99][19],但你正在检查 [100][100][51](while(temp_t <= 50)、while(temp_y <= 99)、temp_x <= 99)。

temp_t将从 0 变为 50 -> 51 个元素。

temp_y将从 0 到 99 -> 100 个元素。

temp_x将从 0 到 99 -> 100 个元素。

当您从阵列的保留内存中出来时,您会收到受保护的内存异常...

另外,为清楚起见,请使用 for 循环:

int nodeMatrix[100][100][20];
for(int x = 0; x < 100; x++)
{
    for(int y = 0; y < 100; y++)
    {
        for(int z = 0; z < 20; z++)
        {
            nodeMatrix[x][y][z] = 0;
        }
    }
}