我是一名新手程序员,似乎无法理解为什么我的阵列被破坏了。 我已经增加了数组的大小,就像人们在这里所说的那样,但那不起作用。我该怎么做?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int sayac,loop,start,loop2,yon,loop3;
int yol[17];
loop3 = 0;
srand(time(NULL));
yon = rand()%2;
for(loop = 0;loop<15;loop++){
yol[loop] = 0;
printf("%d ", yol[loop]);
}
printf("\n");
srand(time(NULL));
start = rand()%15;
yol[start]++;
printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",yol[1],yol[2],yol[3],yol[4],yol[5],yol[6],yol[7],yol[8],yol[9],yol[10],yol[11],yol[12],yol[13],yol[14]);
while(loop3 == 0){
if(yon == 0){
start--;
yol[start%15]++;
printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",yol[1],yol[2],yol[3],yol[4],yol[5],yol[6],yol[7],yol[8],yol[9],yol[10],yol[11],yol[12],yol[13],yol[14]);
yon = rand()%2;
}
if(yon == 1){
start++;
yol[start%15]++;
printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",yol[1],yol[2],yol[3],yol[4],yol[5],yol[6],yol[7],yol[8],yol[9],yol[10],yol[11],yol[12],yol[13],yol[14]);
yon = rand()%2;
}
if(yol[0]!=0&&yol[1]!=0&&yol[2]!=0&&yol[3]!=0&&yol[4]!=0&&yol[5]!=0&&yol[6]!=0&&yol[7]!=0&&yol[8]!=0&&yol[9]!=0&&yol[10]!=0&&yol[11]!=0&&yol[12]!=0&&yol[13]!=0&&yol[14]!=0){
break;}
}
}
答案 0 :(得分:6)
start = rand()%15;
所以start
可以是0。
在你正在进行的while循环中
start--;
所以现在开始是-1而你正在访问
start[-1]
访问不在绑定范围内的数组会导致未定义的行为。
答案 1 :(得分:2)
当您使用负数的模数时,结果也是负数,因此在某些情况下,start
可能是否定的,因此您的yol[start%15]
可能会在数组中找到负数索引 - - &GT;损坏。