c++ 数组和内存出错
Error with c++ Arrays and Memory
我一直在努力将我创建的批处理游戏转换为 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;
}
}
}
- 将字符串存储在c++中的稳定内存中
- 访问者访问变体并返回不同类型时出错
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- 在C 中分配内存时出错
- 读取字符串 的字符时出错.分配内存
- c++ 数组和内存出错
- 获取应用程序的内存使用情况时出错
- 使用calloc分配内存时出错(释放堆块XXX后在YYY修改)
- 为双精度值分配内存时出错
- 在链表的开头插入时读取内存时出错
- 为二维数组动态分配内存时出错
- 释放内存时出错
- 将矢量bool复制到CUDA内存时出错
- Std::out_of_range在内存位置0x0043f7c4.使用矢量和输入文件时出错
- 试图构建最小内存时出错
- 如果使用memcpy,释放内存时出错
- 使用内存出错
- 尝试获取C++上的当前进程内存大小时出错,MinGW
- 如何避免访问已删除的内存块时出错