C++ 使用结构的某些成员会影响结构C的其他成员+;

C++ 使用结构的某些成员会影响结构C的其他成员+;,c++,arrays,struct,C++,Arrays,Struct,问题回答了,谢谢 问题显然是由于没有声明vf的大小足以包含9-->它应该是vf[10] 长话短说,在输入文件中我有一个9 x 9元素的2d数组。它保存来自{0,1…9}的元素。我需要准确地计算出每一个数字在每一行上出现的次数(为此,我使用了vf[]数组),以及有多少与0不同(为此,我使用了“number”)。我将vf[]和number包含到结构中,如下所示: struct Line { short vf[9]; short number; }L[10]; 读取2d数组后,我使

问题回答了,谢谢 问题显然是由于没有声明vf的大小足以包含9-->它应该是vf[10]


长话短说,在输入文件中我有一个9 x 9元素的2d数组。它保存来自{0,1…9}的元素。我需要准确地计算出每一个数字在每一行上出现的次数(为此,我使用了vf[]数组),以及有多少与0不同(为此,我使用了“number”)。我将vf[]number包含到结构中,如下所示:

struct Line
{
    short vf[9];
    short number;
}L[10];
读取2d数组后,我使用Analyze()确定每行有多少数字与0不同,以及每行数字出现的次数

void Analyze()
{
    for ( short i = 1 ; i <= 9 ; ++i )        // lines
        for ( short j = 1 ; j <= 9 ; ++j )    //columns
            if ( M[i][j] )                    //different from 0
            {
                L[i].number++;
                L[i].vf[ M[i][j] ]++;
            }
}
然而,我从每一行中得到的数字是:

9 8 6 8 6 8 10 7 10 
现在,如果我移除L[I].vf[M[I][j]++;从Analyze()中的第行,我得到一个不同的输出,即:

8 7 6 7 6 7 9 6 9
所以问题是,有没有人预感到为什么增加vf[]似乎也会对数量产生影响


如果我犯了任何英语错误,请对我宽容一些。

以下是我对该代码所显示/所做的一些错误/更改:

struct Line
{
    short vf[9]; 
             ^^ here a number 9 can't be counted as index range is 0-8
    short number;
    Line()
    {
        std::fill_n(v,9,0); //fills the array with 0
        number = 0; // Initialized the number with 0
    }

}L[10];
编辑:多亏了
@HolyBlackCat
的评论,我意识到了初始化部分的错误。我现在已经改正了


M是如何申报的?是M[10][10]?那么M的内容呢?范围是0..8吗?如果我也用这种方式读取数组,我认为这不应该是一个问题。这就是我在学校里被教导的方式,它已经成为一种习惯。是,它被宣布为短M[10][10]。它只能包含{0…9}中的元素。没有
vf[9]
vf
的索引范围从0到8。这可能是未定义的行为,因为只要看到
i之类的内容,就可以为自己的问题编写答案并接受它。请考虑这样做。不赞成将“谢谢,已解决”注释添加到问题本身。如果该注释高于主注释,是否需要将其声明为0?我从未遇到过全局未声明变量的问题。
vf[9]={0}不初始化任何内容。它将
0
赋值给不存在的数组元素,导致未定义的行为。@HolyBlackCat感谢您指出这一点。MIHAB BANTEA初始化数组是C++中的好实践。你可以检查许多关于这个主题的答案,比如。
struct Line
{
    short vf[9]; 
             ^^ here a number 9 can't be counted as index range is 0-8
    short number;
    Line()
    {
        std::fill_n(v,9,0); //fills the array with 0
        number = 0; // Initialized the number with 0
    }

}L[10];