gpt4 book ai didi

c++ - 使用递归函数时出现段错误

转载 作者:行者123 更新时间:2023-12-02 10:20:59 25 4
gpt4 key购买 nike

我对编程很陌生,对于我的面向对象类(在 C++ 中),我们有一个带有“X”随机分组的二维数组。我必须使用递归函数来查找不同的分组并清除它们。截至目前,我检查该点是否是 X,清除它,然后检查它周围的 8 个位置(包括对角线),如果 X 中的一个位置,我再次调用该函数,但在那个位置。我的想法是,如果我找到一个 X,我将能够一次将它周围的所有 X 都搞定,因此,当我找到一个 X 时,我可以将它算作一个组。

在函数结束时,我基本上循环遍历所有点,如果有另一个 X,则再次调用递归函数。但是,我不断收到段错误,我不知道为什么。任何帮助将不胜感激!


void Recurssive(string Array[][72],int Pos1, int Pos2)
{

int One=1;
int Two=1;
//cout<<"Test 2";
if(Array[Pos1][Pos2]=="X")
{
Array[Pos1][Pos2]="0";
if(Array[Pos1+1][Pos2]=="X")
{
Recurssive(Array,Pos1+1,Pos2);
}
if(Array[Pos1-1][Pos2]=="X")
{
Recurssive(Array,Pos1-1,Pos2);
}
if(Array[Pos1][Pos2+1]=="X")
{
Recurssive(Array,Pos1,Pos2+1);
}
if(Array[Pos1][Pos2-1]=="X")
{
Recurssive(Array,Pos1,Pos2-1);
}
if(Array[Pos1+1][Pos2+1]=="X")
{
Recurssive(Array,Pos1+1,Pos2+1);
}
if(Array[Pos1-1][Pos2-1]=="X")
{
Recurssive(Array,Pos1-1,Pos2-1);
}
if(Array[Pos1+1][Pos2-1]=="X")
{
Recurssive(Array,Pos1+1,Pos2-1);
}
if(Array[Pos1-1][Pos2+1]=="X")
{
Recurssive(Array,Pos1-1,Pos2+1);
}

}

for(int i=1;i<22;i++)
{
for(int j=1;j<72;j++)
{
if(Array[i][j]=="X")
{
Recurssive(Array,i,j);
}
}
}


}


这是我正在循环的数组的输出
            X                                                         
X
X XXXXXXXXXXXXXXX
X XXXXXXXXXXXXXXX
X XXXXXXXXXXXXXXX XXXX
XXXX XXXXXXXXXXXXXXX XXX XXX
X XXX XXX
XXXXXXXXXXXXXX X XXX XXX
XX XX X XXX XXX
XX XX X XXX XXX
XX XX X XXXX
XX XXXXX XX X
XX XX X
XX XX X
XXXXXXXXXXXXXX X
X
X
X
X
X

最佳答案

让我们玩电脑,为Recurssive(Array, 0, 0) 做个 Action 吧。 .
如果这个位置被标记为 X ,这将按顺序进行以下数组访问:

Array[1][0]
Array[-1][0]
Array[0][1]
Array[0][-1]
Array[1][1]
Array[-1][-1]
Array[1][-1]
Array[-1][1]

这些 -1访问将超出 Array 定义的内存。并且可能读取随机值或可能导致段错误。

为了解决这个问题,您需要在实际访问它之前验证候选职位是否在董事会内。
就像是:
std::optional<std::string> safe_access(std::string Array[][72], int Pos1, int Pos2) {
if (Pos1 < 0 || Pos1 >= 71) return {};
if (Pos2 < 0 || Pos1 >= 21) return {};
return Array[Pos1][Pos2];
}

然后您可以调用 safe_access(Array, -1, -1) == "X"并保证这不会在 Array 之外访问.

关于c++ - 使用递归函数时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60190872/

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