C 变量“yol”周围的堆栈已损坏

C 变量“yol”周围的堆栈已损坏,c,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()%

我是一个新手程序员,似乎无法理解为什么我的数组会损坏。 正如人们在这里所说,我已经增加了数组的大小,但这不起作用。我该怎么办

#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;}
}
}
所以start可以是0

在你的while循环中,你正在做什么

start--;
现在开始是-1,您正在访问

start[-1]

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

< P>当您做负数模时,结果也是否定的,因此在某些情况下,您的开始可能是负的,因此您的YOL(开始% 15)可能在数组中达到负索引->腐败。< /P>我没有看到任何表明这是C++的东西,在C++中,你应该避免交叉标签,而不是使用原始数组。但是,在某个地方,你几乎肯定在向一个超出yol 0-16界限的索引写入数据。这是有道理的,我能做些什么来防止这种情况发生呢?@KaanOlmez start正在做%15为什么还要再做一次呢?你只需使用start作为数组索引。我想做一个循环数组,其中yol[15]和yol[0]它们挨着每一个other@KaanOlmez我希望你们知道数组是连续存储的。是的,我知道。但我需要这样做。但是我想我找到了一个方法。非常感谢你回答我的问题。
start[-1]