我的程序有问题。变量是用意大利语写的,对不起! 我必须处理足球比赛的点球阶段。如果在前五场点球比赛中双方打成平局,则进入点球大战。
if (retiPrimaSquadra != retiSecondaSquadra){
buffer = fopen("buffer.txt", "w");
fprintf(buffer, "%d-%d", retiPrimaSquadra, retiSecondaSquadra);
fclose(buffer);
return 0;
} else {
printf("Risultato secondo tempo supplementare: %d - %d\n\n", retiPrimaSquadra, retiSecondaSquadra);
printf("RIGORI\n");
int rigoreA=0, rigoreB=0;
char vRigoreA[5];
char vRigoreB[5];
int rigore=0;
int i=0;
vRigoreA[i]='x';
//printf("%c", vRigoreA[i]);
for(i=0; i<5; i++){
//tiro prima squadra
rigore = (rand() % 101);
if(rigore <= 75){
rigoreA++;
retiPrimaSquadra++;
vRigoreA[i]='x';
}
else{
vRigoreA[i]='o';
}
//tiro seconda squadra
rigore = (rand() % 101);
if(rigore <= 75){
rigoreB++;
retiSecondaSquadra++;
vRigoreB[i]='x';
}
else{
vRigoreB[i]='o';
}
//stampa xo
printf("%c %c\n", vRigoreA[i], vRigoreB[i]);
}
//risultato 5 rigori
printf("%d - %d\n", rigoreA, rigoreB);
char enter = '\0';
while(enter != '\n'){
enter = getchar();
}
//OLTRANZA
while(rigoreA==rigoreB){
//tiro prima squadra
rigore = (rand() % 101);
if(rigore <= 75){
rigoreA++;
retiPrimaSquadra++;
vRigoreA[i]='x';
} else {
vRigoreA[i]='o';
}
//tiro seconda squadra
rigore = (rand() % 101);
if(rigore <= 75){
rigoreB++;
retiSecondaSquadra++;
vRigoreB[i]='x';
}
else{
vRigoreB[i]='o';
}
//stampa xo
printf("%c %c\n", vRigoreA[i], vRigoreB[i]);
}
printf("check\n");
}
buffer = fopen("buffer.txt", "w");
fprintf(buffer, "%d-%d", retiPrimaSquadra, retiSecondaSquadra);
fclose(buffer);
}
如果最后一个“while”没有进入,程序运行不会出错。否则,在完成 while 循环后,当 buffer.txt 文件中的结果正确时,它会给我一个堆栈粉碎检测到的问题。我真的不知道如何处理它,因为它看起来很愚蠢,如果它不进入 while 就可以了!
最佳答案
此时您正在使用 i
访问您的 vRigoreA
数组 (vRigoreA[i]='x';
)。但是,i
在 for
循环之后设置为 5
,因此您正在访问不属于数组的堆栈内存。在函数结束时,调试器检测到发生了越界写入。
关于在文件管理中检测到 c 堆栈粉碎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24034820/