#5089: 出現RE


danny50610 (程式語言太多種)

學校 : 臺中市立忠明高級中學
編號 : 13665
來源 : [117.19.192.116]
最後登入時間 :
2018-09-29 02:48:45
a065. 提款卡密碼 -- 板橋高中教學題 | From: [218.170.32.89] | 發表日期 : 2011-04-29 00:21

情況是這樣的

我根據題目(a065)寫出以下的程式碼:

#include "stdio.h"
#include "stdlib.h"
#include "math.h"

int main()
{
    char str[7];
    while (scanf("%s",str) != EOF)
    {
        int i;
        for (i=0;i<6;i++)
        {
            int num = abs(str[i]-str[i+1]);
            printf("%d",num);
        }
        printf("\n");
    }
    return 0;
}

在我自己的電腦測試題目給的數據都沒有問題

但是丟上來測試,卻得到

執行時發生錯誤 (SIGSEGV)(11)!!
Segmentation fault, an address reference boundary error.(記憶體區段錯誤)
可能原因為:
* 通常為使用超過陣列範圍
* 指標指向不正確位址!
* 陣列初始化不正確!
* 嘗試在執行時期定義陣列長度!
sh: line 1: 11348 程式記憶體區段錯誤   /tmp/code_788696.exe <a065.in >/tmp/code_788696.out

我想了很久,都找不出原因,希望大家幫我看看。

軟體我是使用:

Microsoft Visual C++ 2008 Express Edition

 
#5105: Re:出現RE


datou (datou)

學校 : 德霖技術學院
編號 : 12953
來源 : [218.161.101.34]
最後登入時間 :
2013-12-28 23:48:47
a065. 提款卡密碼 -- 板橋高中教學題 | From: [218.161.51.70] | 發表日期 : 2011-05-09 07:47

情況是這樣的

我根據題目(a065)寫出以下的程式碼:

#include "stdio.h"
#include "stdlib.h"
#include "math.h"

int main()
{
    char str[8];  改成8就AC

    while (scanf("%s",str) != EOF)
    {
        int i;
        for (i=0;i<6;i++)
        {
            int num = abs(str[i]-str[i+1]);
            printf("%d",num);
        }
        printf("\n");
    }
    return 0;
}

在我自己的電腦測試題目給的數據都沒有問題

但是丟上來測試,卻得到

執行時發生錯誤 (SIGSEGV)(11)!!
Segmentation fault, an address reference boundary error.(記憶體區段錯誤)
可能原因為:
* 通常為使用超過陣列範圍
* 指標指向不正確位址!
* 陣列初始化不正確!
* 嘗試在執行時期定義陣列長度!
sh: line 1: 11348 程式記憶體區段錯誤   /tmp/code_788696.exe /tmp/code_788696.out

我想了很久,都找不出原因,希望大家幫我看看。

軟體我是使用:

Microsoft Visual C++ 2008 Express Edition


 
#5123: Re:出現RE


danny50610 (程式語言太多種)

學校 : 臺中市立忠明高級中學
編號 : 13665
來源 : [117.19.192.116]
最後登入時間 :
2018-09-29 02:48:45
a065. 提款卡密碼 -- 板橋高中教學題 | From: [218.170.35.49] | 發表日期 : 2011-05-19 23:52

情況是這樣的

我根據題目(a065)寫出以下的程式碼:

#include "stdio.h"
#include "stdlib.h"
#include "math.h"

int main()
{
    char str[8];  改成8就AC

    while (scanf("%s",str) != EOF)
    {
        int i;
        for (i=0;i<6;i++)
        {
            int num = abs(str[i]-str[i+1]);
            printf("%d",num);
        }
        printf("\n");
    }
    return 0;
}

在我自己的電腦測試題目給的數據都沒有問題

但是丟上來測試,卻得到

執行時發生錯誤 (SIGSEGV)(11)!!
Segmentation fault, an address reference boundary error.(記憶體區段錯誤)
可能原因為:
* 通常為使用超過陣列範圍
* 指標指向不正確位址!
* 陣列初始化不正確!
* 嘗試在執行時期定義陣列長度!
sh: line 1: 11348 程式記憶體區段錯誤   /tmp/code_788696.exe /tmp/code_788696.out

我想了很久,都找不出原因,希望大家幫我看看。

軟體我是使用:

Microsoft Visual C++ 2008 Express Edition

謝謝指點,不知是不是要留一個空間給 \0 ,才不會出現錯誤
我以前都沒在注意這個問題,難怪會出錯

 
#6547: Re:出現RE


tonyadsl (藏AC太奸詐了! 要求透明化!)

學校 : 桃園市私立復旦高級中學
編號 : 21597
來源 : [116.241.163.88]
最後登入時間 :
2023-04-09 21:56:45
a065. 提款卡密碼 -- 板橋高中教學題 | From: [61.57.32.35, 61.57.32.35] | 發表日期 : 2012-04-15 14:36

我的也 RE

RE (SIGKILL)
執行時期錯誤

產生立即終止訊號!!  Killed  

 不知道是哪邊錯了....

最怕的不是 WA 而是這種錯誤

#include<iostream>
using namespace std;
int change(int a)
{
    if(a>=0)
    return a;
    else
    return -a;
   
}

int main()
{
    char a,b;
        cin >> b;
        for(int time=7;time>1;time--)
        {
            cin >> a;
            cout << change((int)b-(int)a) ;
            b=a;
          
            if(time==2)
            {
                cout << endl ;
                cin >> b;
                time=8;
                continue;
                }
        }
}

 
ZeroJudge Forum