2D阵列中的元素缺失?

时间:2017-11-08 08:05:31

标签: c arrays loops

我使用函数来分配2D数组的模式。除了我的' ans'之外,所有其他阵列都在显示。数组(最后一行'短划线丢失)。我猜这个问题是因为' pat2match'功能(合并所有模式)。因为,如果我不指定' ans'这个'功能'并打印一个空模式数组,所有破折号显示。

合并模式的函数:

char pat2match(char mypattern[13][13], char pat1[13][13], char pat2[13][13], 
        char pat3[13][13], char pat4[13][13], char pat5[13][13])
{
    int r,c;

    overlap(mypattern,pat5);
    overlap(mypattern,pat2);
    overlap(mypattern,pat4);
    overlap(mypattern,pat3);
    return overlap(mypattern,pat1);
}

分配' ans':

mytile(ans);
for(r=0;r<13;r++)
{
    for(c=0;c<13;c++)
    {
        ans[r][c] = pat2match(ans,pattern1,pattern2,pattern3,pattern4,pattern5);
    }
}

重叠功能:

char overlap(char pat1[13][13], char pat2[13][13])
{
    int r,c;

    for(r=0;r<13;r++)
    {
        //printf("|");
        for(c=0;c<13;c++)
        {
            if(pat1[r][c] == ' ' || pat2[r][c] != ' ')
            {
                pat1[r][c] = pat2[r][c];
            }
            //printf(" %c ", pat1[r][c]);
        }
        //printf("|\n");
    }
    return pat1[r][c];
}

空图案(短划线就像边框一样):

void mytile(char pat[13][13])
{
    int r,c;

    for(r=0;r<13;r++)
    {
        for(c=0;c<13;c++)
        {
            if(r==0 || r==12)
            {
                pat[r][c] = '-';
            }
            else
            {
                pat[r][c] = ' ';
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

overlap的返回值是未定义的行为:

return pat1[r][c];

当执行此return语句时,rc都是13.两者都不能大于12.它正在索引超出数组的边界,这是未定义的行为。