分段故障
Segmentation fault
#include <iostream>
using namespace std;
void initializeMap(int mapSizeX, int mapSizeY, int map[][10])
{
// Map details:
// 0 = # (wall)
// 1 = space (free space)
// 2 = x (player)
for(int x = 0; x < mapSizeX; x++)
{
map[x][0] = 0;
}
for(int y = 0; y < (mapSizeY - 2); y++)
{
map[0][y] = 0;
for(int x = 0; x < (mapSizeX - 2); x++)
{
map[x][y] = 1;
}
map[mapSizeX][y] = 0;
}
for(int x = 0; x < mapSizeX; x++)
{
map[x][mapSizeY - 1] = 0;
}
}
void paintMap(int mapSizeX, int mapSizeY, int map[][10])
{
for(int y = 0; y < mapSizeY; y++)
{
for(int x = 0; x < mapSizeX; x++)
{
switch(map[x][y])
{
case 0:
cout << "#";
break;
case 1:
cout << " ";
break;
case 2:
cout << "x";
break;
}
cout << map[x][y];
}
cout << endl;
}
}
int main()
{
int mapSizeX = 10;
int mapSizeY = 10;
int map[10][10];
initializeMap(mapSizeX, mapSizeY, map);
paintMap(mapSizeX, mapSizeY, map);
cout << endl << endl;
return 0;
}
我的代码编译得很好,没有错误,但当我尝试运行它时,它只会说"分段错误"。我做了一些研究,我不明白为什么我会得到它,因为我根本不使用指针。我该如何解决这个问题?我使用g++编译它,只需键入即可运行它/主要在终端。
map[mapSizeX][y] = 0;
这是违法的。索引的有效值从0
运行到mapSizeX - 1
。
线路应为:
map[mapSizeX][y] = 0;
有人假设这是想要的输出?
#0#0#0#0#0#0#0#0#0#0 #0 1 1 1 1 1 1 1 1#0 #0 1 1 1 1 1 1 1 1#0 #0 1 1 1 1 1 1 1 1#0 #0 1 1 1 1 1 1 1 1#0 #0 1 1 1 1 1 1 1 1#0 #0 1 1 1 1 1 1 1 1#0 #0 1 1 1 1 1 1 1 1#0 #0 1 1 1 1 1 1 1 1#0 #0#0#0#0#0#0#0#0#0#0
如果是这样,则在initializeMap
函数中存在许多其他逐个关闭的错误。代替:
for(int y = 0; y < (mapSizeY - 2); y++)
和
for(int x = 0; x < (mapSizeX - 2); x++)
你应该使用
for(int y = 1; y < (mapSizeY - 1); y++)
和
for(int x = 1; x < (mapSizeX - 1); x++)
分别。
顺便说一句,这里有一种更干净的写initializeMap
:的方法
template<int mapSizeX, int mapSizeY>
void initializeMap(int (&map)[mapSizeX][mapSizeY])
{
for( int y = 0; y < mapSizeY; y++ ) {
for( int x = 0; x < mapSizeX; x++ ) {
if (x == 0 || x + 1 == mapSizeX || y == 0 || y == mapSizeY)
map[x][y] = 0;
else
map[x][y] = 1;
}
}
}
你可以用来称呼它
initializeMap(map);
不需要传递大小,编译器会自动计算出来。
我没有深入了解这是否是您代码的唯一问题,但
map[mapSizeX][y] = 0;
将在数组的边界之上写入。
在initializeMap
-的循环的第二个中
map[mapSizeX][y] = 0;
CCD_ 6是10,并且在矩阵中不存在CCD_。
相关文章:
- 分段故障(堆芯转储)矢量
- 数组的指针从不分段故障
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 分段故障背包问题
- 分段故障 11,从类函数显示动态 C 字符串
- 面临分段故障 使用 ffmpeg 读取视频时,因为"pFormatCtx-> streams [i]-> codecpar"的地址0x00
- 在C++中,当指向删除和指向不同对象时,分段故障指针
- 对程序故障进行分段
- 分段故障说明
- 分段故障(核心转储)-不知道为什么
- 分段故障线程
- hiredis SET遇到分段故障
- 分段故障,合并排序算法
- 多线程程序中的分段故障和gdb回溯上的不完整信息
- 到达主C++之前分段故障
- 分段故障核心使用 IF流转储
- 使用向量的移动键盘排列(分段故障)
- 在二进制树插入和遍历期间,我得到了分段故障
- 分段故障在类之间返回整数