为什么我不能返回向量<向量<int>>(进程返回 -1073741819 (0xC0000005))
Why can't I return a vector<vector<int>> (Process returned -1073741819 (0xC0000005))
我试图用C++制作一个基于网格的程序。但是每次运行它时,我都会收到相同的错误(在标题中显示(。我知道这是一个很常见的错误,但在仔细阅读代码后,我无法发现任何错误:
#include <iostream>
#include <vector>
using namespace std;
using grid = vector<vector<int>>;
int getNeighboursCount(grid g,int x,int y)
{
int nCount = 0;
if(x > 0 && y > 0){if(g[x-1][y-1] == 1){++nCount;};};
if(x > 0){if(g[x-1][y] == 1){++nCount;};};
if(y > 0){if(g[x][y-1] == 1){++nCount;};};
if(x < g.size() && y < g[x].size()){if(g[x+1][y+1] == 1){++nCount;};};
if(x < g.size()){if(g[x+1][y] == 1){++nCount;};};
if(y > g[x].size()){if(g[x][y+1] == 1){++nCount;};};
if(x > 0 && y < g[x].size()){if(g[x-1][y+1 == 1]){++nCount;};};
if(x < g.size() && y > 0){if(g[x+1][y-1] == 1){++nCount;};};
return nCount;
}
grid testCell(grid g, grid gN, int x, int y)
{
gN = g;
auto nCount = getNeighboursCount(g, x, y);
if(g[x][y] == 1) //1 == TRUE == alive
{
if(nCount == 3 || nCount == 2){gN[x][y] == 1;} //Keep status
else
{
gN[x][y] = 0;
}
}
else if(g[x][y] == 0)
{
if(nCount == 3){gN[x][y] = 1;}
else {gN[x][y] == 0;};
}
return gN;
}
grid step(grid g, grid gN)
{
for(int i = 0; i < g.size(); ++i)
{
for(int j = 0; j < g[i].size(); ++j)
{
gN = testCell(g, gN, i, j);
}
}
// works fine till here...
return gN;
}
int main()
{
grid g =
{ ...
// 40 times 40 grid of 0
};
output(g);
string useless;
grid gN = g;
while(getline(cin, useless))
{
gN = step(g, gN);
output(gN);
}
}
因此,当我启动程序时,它会按预期打印出整个网格。但是当它到达gN = step(...);
我得到一个错误的地步时。但是我能够发现它与 swap(( 函数的return gN;
语句有关。
感谢帮助
您正在尝试在getNeighboursCount()
内测试越界条件,但您并没有完全正确。在行中
if(x < g.size() && y < g[x].size()){if(g[x+1][y+1] == 1){++nCount;};};
if(x < g.size()){if(g[x+1][y] == 1){++nCount;};};
if(y > g[x].size()){if(g[x][y+1] == 1){++nCount;};};
if(x > 0 && y < g[x].size()){if(g[x-1][y+1 == 1]){++nCount;};};
if(x < g.size() && y > 0){if(g[x+1][y-1] == 1){++nCount;};};
每次溢出测试(例如x < g.size()
( 不正确。getNeighbourghsCount()
方法永远不会使用不满足条件的x
进行调用,x
始终小于容器的大小,因为它是基于 0 的索引。修复它的一种方法是将条件更改为x < g.size() - 1
还有其他问题,例如g[x-1][y+1 == 1]
肯定是一个错字。但这可能会让你开始...
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中