gpt4 book ai didi

c++ - 为什么我不能返回一个 vector> (Process returned -1073741819 (0xC0000005))

转载 作者:太空宇宙 更新时间:2023-11-04 12:29:34 25 4
gpt4 key购买 nike

我尝试用 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]肯定是错字。但这可能会让你开始......

关于c++ - 为什么我不能返回一个 vector<vector<int>> (Process returned -1073741819 (0xC0000005)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59191249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com