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;