【问题标题】:c stack smashing detected on file managing在文件管理中检测到 c 堆栈粉碎
【发布时间】:2014-06-04 10:18:29
【问题描述】:

我的程序有问题。变量是用意大利语写的,对不起! 我必须处理足球比赛的处罚阶段。如果在前五场点球大战中两队打成平局,他们将进行点球大战到底。​​p>

    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 文件中的结果时,它会给我一个堆栈粉碎检测问题。我真的不知道怎么处理,因为它看起来很愚蠢,如果它不进入它就可以了!

【问题讨论】:

标签: c file stack-smash


【解决方案1】:

您正在使用 i 在 while (vRigoreA[i]='x';) 中访问您的 vRigoreA 数组。但是,ifor 循环之后设置为5,因此您正在访问不属于数组的堆栈内存。在函数结束时,调试器检测到发生了越界写入。

【讨论】:

    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多