程序接收信号EXC_BAD_ACCESS-Mac OS X
Program received signal EXC_BAD_ACCESS - Mac OS X
当我将std::vector中的元素与char进行比较时,我有时会在运行到程序时(大约每五次一次)随机出现此错误:
程序接收到EXC_BAD_ACCESS信号,无法访问内存。
原因:13,地址:0x0000000000000000
在src/main.cpp:198处的randomCaveGenerator中0x0000000100017c49(p=@0x7fff5fbff51c,q=@0x7ff f5fbff 518,seed=1234567)198如果(lm.map[1][i][j]=='0')
v被定义为一个std::向量,所有元素都已填充。我知道这个错误通常意味着它指向一个空指针,但我知道不应该有一个。
我使用Mac OS X 10.8、gdb进行调试,并使用Apple LLVM 4.2版(基于LLVM 3.2svn)进行编译。
编辑
我正在使用的代码:
typedef std::vector< std::vector<char> > MapGrid;
struct LevelMap
{
std::string name;
std::vector<MapGrid> map;
sf::Vector2u size;
};
LevelMap randomCaveGenerator(int p=64, int q=64, unsigned long seed=1)
{
if (p < 64)
p = 64;
if (q < 64)
q = 64;
int groundLevel = 12;
srand(seed);
sf::Vector2u size(p, q);
std::vector<MapGrid> mapG(3);
for (int i = 0; i < 3; i++)
{
mapG[i] = MapGrid(size.x, std::vector<char>(size.y));
for (int y = 0; y < size.y; y++)
{
for (int x = 0; x < size.x; x++)
{
mapG[i][x][y] = '0';
}
}
}
for (int y = 0; y < size.y; y++)
{
for (int x = 0; x < size.x; x++)
{
mapG[0][x][y] = 'v'; // Void Tile
}
}
for (int y = 0; y < size.y; y++)
{
for (int x = 0; x < size.x; x++)
{
mapG[2][x][y] = '0'; // Air Tile
}
}
for (int y = groundLevel; y < size.y; y++)
{
for (int x = 0; x < size.x; x++)
{
int e = 23;
if (2+(rand()%e)< e/2)
mapG[1][x][y] = 'd';
else
mapG[1][x][y] = '0';
}
}
LevelMap lm;
lm.name = "Random Map";
lm.map = mapG;
lm.size = size;
for (int i = 0; i < 12; i++)
doSimStep(lm);
for (int i = 1; i < lm.size.x - 2; i++)
{
for (int j = 1; j < 12+groundLevel; j++)
{
if (lm.map[1][i][j] == '0') // PART WHERE THE ERROR IS
continue;
else
{
lm.map[1][i][j] = 'g';
lm.map[2][i][j-1] = 'w';
i++;
j = 1;
}
}
}
for (int i = 1; i < lm.size.x - 2; i++)
{
for (int j = groundLevel; j < lm.size.y - 2; j++)
{
if (lm.map[1][i][j] == 'd')
{
if (rand()%120 == 0)
lm.map[2][i][j] = 'p';
}
}
}
for (int i = 0; i < lm.size.y; i++)
{
lm.map[1][0][i] = 'X';
lm.map[1][lm.size.x-2][i] = 'X';
lm.map[2][0][i] = '0';
lm.map[2][lm.size.x-2][i] = '0';
}
for (int i = 0; i < lm.size.x; i++)
{
lm.map[1][i][0] = 'X';
lm.map[1][i][lm.size.y-2] = 'X';
lm.map[2][i][0] = '0';
lm.map[2][i][lm.size.y-2] = '0';
}
return lm;
}
除了错误消息之外没有任何源代码
if (v[i] == '0')
我只能想象i >= v.size()
您可能需要考虑使用迭代器来访问您的向量,这样就不会走到最后。
相关文章:
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何使用Clang/GCC在Mac上为C/C++设置VSCode
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- 有人安装"IITB Simplecpp in mac"吗?
- libprotobuf 检查在 Mac OS 上执行程序时失败
- 如何在 Mac 上使用 c++17 并行标准库算法?
- 在 Mac 上的 python 上提升
- 我可以在 iOS 或 mac 应用程序中使用C++代码吗?
- 如何在 Mac 上正确编译C++,当它在 Linux 上编译没有问题时?
- C++读取用户输入而不按回车键(Mac OS X),与Turbo Pascal中的读取键相同
- 如何在 MAC OS c/c++ 中阻止 USB 存储设备
- 编译在我的 Mac 上工作,但在集群 (Linux) 上不起作用
- 在装有 CLion 的 Mac 上使用 C++ 连接到 MySQL 数据库时出现问题
- 动态获取 esp32 的 mac 地址并在以太网库中使用它.
- GDB 断点在 Mac 上是不准确的
- 各种版本的 Mac OSX 向后兼容性如何?(Xcode C++
- 无法识别 Mac c++ 文件系统库
- Bad Linux Memory Map File Performance with Random Access C++ & Python