堆叠变量' yol'被腐败了

时间:2014-12-16 17:52:12

标签: c

我是一名新手程序员,似乎无法理解为什么我的阵列被破坏了。 我已经增加了数组的大小,就像人们在这里所说的那样,但那不起作用。我该怎么做?

#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;}
}
}

2 个答案:

答案 0 :(得分:6)

start = rand()%15;

所以start可以是0。

在你正在进行的while循环中

start--;

所以现在开始是-1而你正在访问

start[-1]

访问不在绑定范围内的数组会导致未定义的行为。

答案 1 :(得分:2)

当您使用负数的模数时,结果也是负数,因此在某些情况下,start可能是否定的,因此您的yol[start%15]可能会在数组中找到负数索引 - - &GT;损坏。