C函数在第一次运行时返回正确的结果,但在第二次运行时返回false+;跑

C函数在第一次运行时返回正确的结果,但在第二次运行时返回false+;跑,c,arrays,pointers,C,Arrays,Pointers,我正在创建一个程序,计算上次彩票中显示的数字。问题是,我创建了两个函数,一个返回数组,另一个缩短数组并打印结果,但是当我第一次从程序中运行函数时,它会打印正确的结果,但在第二次、第三次等等,它会生成错误的结果 我还想说,存储在*数据库中的数组没有改变 //第一功能 void LateJoker(int *database){ int i,j,k; int *numbersCount,numbersSeen[21]; int

我正在创建一个程序,计算上次彩票中显示的数字。问题是,我创建了两个函数,一个返回数组,另一个缩短数组并打印结果,但是当我第一次从程序中运行函数时,它会打印正确的结果,但在第二次、第三次等等,它会生成错误的结果

我还想说,存储在*数据库中的数组没有改变

//第一功能

void LateJoker(int *database){
            int i,j,k;
            int *numbersCount,numbersSeen[21];
            int numbersShort[21],max,pos,tmp;
            int size = *database;
            int *memAddress;
            int currentNumber;
            int countBreak;
            /*

            for (i=1;i<=20;i++)
                numbersCount[i]=0;

            for (i=size*SIZEOFRAW;i>=10;i-=10){
                memAddress = database + i;

                numbersSeen[*(memAddress +9)] = 1;


                for(k=1;k<=20;k++){
                    if (numbersSeen[k] != 1){
                        numbersCount[k] += 1;
                    }
                }
            }*/
            numbersCount = LateJokerRet(database);
            //short the numebrsCount array (insertion short)
            for (i=1;i<=20;i++)
                numbersShort[i] = i;

            for (i=1;i<=19;i++){
                pos = i;
                for (j=i+1;j<=20;j++){
                    if (numbersCount[pos] < numbersCount[j]){
                        pos = j;
                    }
                }
                if (pos != i){
                    tmp = numbersCount[pos];
                    numbersCount[pos] = numbersCount[i];
                    numbersCount[i] = tmp;

                    tmp = numbersShort[i];
                    numbersShort[i] = numbersShort[pos];
                    numbersShort[pos] = tmp;
                }
            }

            for (i=1;i<=20;i++){
                printf("%d=%d  ",numbersShort[i],numbersCount[i] );
                if (i % 5 == 0) printf("\n");
            }
            free(numbersCount);
        }
错误输出:

14=111  16=74  12=47  7=42  18=27  
3=18  17=16  15=13  10=12  13=10  
9=9  11=7  20=6  1=5  8=4  
6=2  2=1  5=0  19=0  4=0  
正如你所看到的,错误的数字只有5和4


怎么了/

如前所述,
numberSeen
中的内容不会初始化

我想这是有意的

        for (i=1;i<=20;i++)
            numbersSeen[i]=0;

for(i=1;i什么值是
SIZEOFRAW
?你知道C中的数组是基于零的,不是吗?这闻起来像UB。@Ian SIZEOFRAW=10是2d数组,但在我的整个程序中是作为1d的。我经常使用指针。@Eugene你是说我为什么使用calloc?
14=111  16=74  12=47  7=42  18=27  
3=18  17=16  15=13  10=12  13=10  
9=9  11=7  20=6  1=5  8=4  
6=2  2=1  5=0  19=0  4=0  
        for (i=1;i<=20;i++)
            numbersSeen[i]=0;