地下城生成代码分割错误
Segmentation Fault on Dungeon Generation code
在这段看似正常的生成代码中出现了段错误。
我把它缩小到这个函数:
std::array<uint16_t, 5> makeExit(int rm) {
std::array<uint16_t, 5> ex;
std::array<uint16_t, 4> room;
room = roomList[rm];
int rx, ry, rx2, ry2;
while (1) {
int rw = rand() % 4;
switch (rw) {
case 0:
// north wall
rx = room[2] + (rand() % room[1]);
ry = room[3] - 1;
rx2 = rx;
ry2 = ry - 1;
break;
case 1:
// east wall
rx = room[3] + (rand() % room[0]);
ry = room[2] + room[1];
rx2 = rx + 1;
ry2 = ry;
break;
case 2:
// south wall
rx = room[2] + (rand() % room[1]);
ry = room[3] + room[0];
rx2 = rx;
ry2 = ry + 1;
break;
case 3:
// west wall
rx = room[3] + (rand() % room[0]);
ry = room[2] - 1;
rx2 = rx - 1;
ry2 = ry;
break;
if (mapData[ry2][rx2] == 2) {
// this is a wall, exit
ex[0] = (uint16_t) rx;
ex[1] = (uint16_t) ry;
ex[2] = (uint16_t) rx2;
ex[3] = (uint16_t) ry2;
ex[4] = (uint16_t) rw;
break;
}
}
return ex;
}
经过几个小时的调试,我仍然不知道它在哪里。
分段故障似乎发生在第3或第4个循环之后。
roomList是std::array<uint16_t, 4>
的std::vector
,它保存地牢的房间数据,mapData是uint16_t
的2D std::vector
,它保存贴图数据。在valgrind上,它写的是Invalid read of size 2
和Address 0x31 is not stack'd, malloc'd or (recently) free'd
你们能帮我找到分段故障吗?
Wow epic fail:/
看起来mapData[ry2][rx2]
应该是mapData[ry][rx]
。(facepalm指)
我还修复了switch
语句(另一个史诗般的失败:|)
我用来生成房间的函数(makeRoom())返回了一些我不想要的数字(rand() % 8 + 5
而不是rand() % 8 + 3
),所以我改变了!
现在没有段错误了
相关文章:
- C++映射分割错误(核心转储)
- 由cin中的字符串中未捕获空白引起的分割错误
- 删除映射和分割错误中的一个过去结束元素
- 在指向函数中读取变量时出现分割错误
- 在链表中的第 n 位插入显示分割错误
- 较高值 n 的分割错误(例如 n=999997)
- 尝试通过memcpy复制大尺寸浮点向量时的分割错误
- 分割错误:向量中的擦除功能
- 向量向量的分割错误
- 我在C++中编写了一个方法来打印树类的预序,但它显示了分割错误
- C ++分割错误,为什么使用"long long"我没有得到答案?
- 在尝试使用递归查找集合子集的总数时,我遇到了分割错误
- 分割错误 11:尝试使用 cin 输入 B[1] 时
- 集合布局上的 Qt 分割错误
- 高达20亿的筛子会产生分割错误
- 对向量使用推回函数时的分割错误
- 绘制精灵会导致分割错误
- 将矢量的整数内容打印为字符串会导致分割错误
- 分割错误:使用向量时为 11 c++
- 结构的分割错误错误