#22477: 記憶體區段錯誤!Segmentation fault (core dumped)


jason17654321@gmail.com (jason jason)

學校 : 不指定學校
編號 : 97235
來源 : [111.253.194.115]
最後登入時間 :
2021-03-02 18:01:33
a271. 彩色蘿蔔 -- 兔子 | From: [36.235.15.5] | 發表日期 : 2020-09-07 12:10

#include <stdio.h>

#include <string.h>

 

int x,y,z,w;

int n; // poison

int rbtWght;

 

int rabbitFate(int eatIntArr[100],int days){

    int isPoison = 0;// poisoning

    int isDead = 0;

    int po  = 0;

 

    int i;

 

    for(i = 0; i < days; i++){

        if (isPoison){

            rbtWght -= po;

        }

        if (rbtWght <= 0){

            isDead = 1;

            break;

        }

        switch (eatIntArr[i]){

            case 1:

                rbtWght += x;

                break;

            case 2:

                rbtWght += y;

                break;

            case 3:

                rbtWght -= z;

                break;

            case 4:

                rbtWght -= w;

                po += n;

                isPoison = 1;

                break;

        }

    }

    if (isDead){

        printf("bye~Rabbit\n");

        // return isDead;

    }else{

        printf("%dg\n", rbtWght);

        // return isDead;

    }

}

 

int main(void){

    int t;

    int eat;

    char el;

    int eatIntArr[100];

 

    int i;

 

    scanf("%d",&t);

    while(t--){

        scanf("%d %d %d %d %d %d",&x,&y,&z,&w,&n,&rbtWght);

        i = 0;

        for(i = 0,el = ' '; el != '\n'; i++){

            scanf("%d%c",&eat,&el);

            eatIntArr[i] = eat;

        }

        rabbitFate(eatIntArr,i);

        memset(eatIntArr,0,sizeof(eatIntArr));

    }

 

    return 0;

}

 

請問一下

記憶體區段錯誤,是指我的陣列不夠大嗎

還是說有其他問題我沒有注意到...?

 
#22584: Re:記憶體區段錯誤!Segmentation fault (core dumped)


snakeneedy (蛇~Snake)

學校 : 國立高雄師範大學附屬高級中學
編號 : 7661
來源 : [114.40.8.251]
最後登入時間 :
2023-01-25 19:16:06
a271. 彩色蘿蔔 -- 兔子 | From: [218.161.41.139] | 發表日期 : 2020-09-17 16:58

沒實際測試資料可以試你的程式碼,僅建議你可以在

scanf("%d%c",&eat,&el);

後,就直接對 eat 做處理,當遇到 rbtWght <= 0 的狀況時,就不再處理 eat (但還是要讀完整行)

也就不需要儲存到 eatIntArr ,避免陣列開得不夠大的問題

 
#22623: Re:記憶體區段錯誤!Segmentation fault (core dumped)


jason17654321@gmail.com (jason jason)

學校 : 不指定學校
編號 : 97235
來源 : [111.253.194.115]
最後登入時間 :
2021-03-02 18:01:33
a271. 彩色蘿蔔 -- 兔子 | From: [36.235.21.249] | 發表日期 : 2020-09-20 11:24

沒實際測試資料可以試你的程式碼,僅建議你可以在

scanf("%d%c",&eat,&el);

後,就直接對 eat 做處理,當遇到 rbtWght <= 0 的狀況時,就不再處理 eat (但還是要讀完整行)

也就不需要儲存到 eatIntArr ,避免陣列開得不夠大的問題


已AC!!感謝指教!!

 
ZeroJudge Forum