这是我的代码的一部分:
for(i = 0; i < rows; i++)
{
for(j = 0; j < columns; j++)
{
for(k = 0; k < rows - i && k < columns - j; k++)
{
if(i + k > rows || j + k > columns) break;
if(b->board[i + k][j + k] == 1) counter++;
if(b->board[i + k][j + k] == 2) counter = 0;
if(counter > max_pd)
{
plh = counter;
jkee = j;
kkee = k;
}
}
counter = 0;
}
if(plh > max_pd)
{
max_pd = plh;
plh = 0;
for(n = 0; n < 1; n++)
{
if(i + kkee > rows || jkee + kkee + 1 > columns) break;
if(b->board[i + kkee + 1][jkee + kkee + 1] == 0 && b->board[i + kkee][jkee + kkee + 1] != 0) play_pd = jkee + kkee + 1;
}
}
counter = 0;
plh = 0;
jkee = 0;
kkee = 0;
}
尝试在以下行运行此代码时出现分段错误:
if(b->board[i + kkee + 1][jkee + kkee + 1] == 0 && b->board[i + kkee][jkee + kkee + 1] != 0) play_pd = jkee + kkee + 1;
但是,在上面的确切行中,我清楚地指出,如果放入的数字不存在,请中断。
(板子在这样的结构中定义:b-> board [rows [columns])
答案 0 :(得分:0)
问题在这里:
if(i + kkee > rows || jkee + kkee + 1 > columns) break;
if(b->board[i + kkee + 1][jkee + kkee + 1] == 0 && b->board[i + kkee][jkee + kkee + 1] != 0) play_pd = jkee + kkee + 1;
bord的每一列的索引必须分别为< rows
和< columns
。
打破测试应该是
if(i + kkee + 1 >= rows || jkee + kkee + 1 >= columns) break;
这将确保下一条指令不会超出范围使用索引。
您在使用说明上也遇到了同样的问题:
if(i + k > rows || j + k > columns) break;
if(b->board[i + k][j + k] == 1) counter++;
if(b->board[i + k][j + k] == 2) counter = 0;
中断测试应为
if(i + k >= rows || j + k >= columns) break;