#7456: RE怎麼辦?


uranusx86 (Uranusx86)

學校 : 國立彰化師範大學
編號 : 28191
來源 : [106.1.27.122]
最後登入時間 :
2015-09-29 22:09:54

#include <stdio.h>

int sepnum(int n,int m[])   
{                           
    int i=0,ten=1;
    
    while(n/ten!=0){
             m[i]=n/ten%10;
             i++;
             ten=ten*10;         }
             
    return i;
}

int main()
{
    int num,n,m,i,j,sum,a[20];
    
    scanf("%d",&m);
    
    for(i=0;i<m;i++){
            scanf("%d",&num);
            n=sepnum(num,a);
            
            for(j=0,sum=1;j<n;j++)
                    sum=sum*a[j];
                    
            printf("%d\n",sum);
    }
    return 0;
}
在dev C++上執行過沒問題,陣列大小也改過10或15都沒辦法

RE (SIGSEGV)
執行時期錯誤

記憶體區段錯誤!  Segmentation fault
#7459: Re:RE怎麼辦?


passerr (20130326 0340 48)

學校 : 不指定學校
編號 : 8516
來源 : [125.224.93.117]
最後登入時間 :
2024-09-05 12:09:52

其實我不太懂,我想你先試試

輸入

2147483647

還有

214748364

這兩個相差1位數

而第一個就會出問題

用除錯器跟看看,哪一步出乎你意料吧

還有,如果輸入0,應該輸出0吧?

 

#7462: Re:RE怎麼辦?


a100438a13 (panda)

學校 : 不指定學校
編號 : 8845
來源 : [219.77.54.191]
最後登入時間 :
2014-09-06 01:06:54

#include

int sepnum(int n,int m[])   
{                           
    int i=0,ten=1;
    
    while(n/ten!=0){
             m[i]=n/ten%10;
             i++;
             ten=ten*10;         }
             
    return i;
}

int main()
{
    int num,n,m,i,j,sum,a[20];
    
    scanf("%d",&m);
    
    for(i=0;i
            scanf("%d",&num);
            n=sepnum(num,a);
            
            for(j=0,sum=1;j
                    sum=sum*a[j];
                    
            printf("%d\n",sum);
    }
    return 0;
}
在dev C++上執行過沒問題,陣列大小也改過10或15都沒辦法

RE (SIGSEGV)
執行時期錯誤

記憶體區段錯誤!  Segmentation fault
這個..
可以理解為access violation?
即是你access宜告陣列大小以外的元素
如你宣告了: int a[1000]
你的程式運行時的某一部份access a[1000],a[1001],a[-1]等
以上都是不允許的

另一可能會是在main local開一個過大的陣列
如int a[10000000]
這是不允許的, 要放在global才開到
如果global也開不到
那即是不能這樣寫,你要找一個更好的演算法

再另一個可能會是
uninitialized variable
即是你在local開了新的variable
而你的程式access該未初始化的variable
也會有這個錯誤? (不肯定
#7482: Re:RE怎麼辦?


uranusx86 (Uranusx86)

學校 : 國立彰化師範大學
編號 : 28191
來源 : [106.1.27.122]
最後登入時間 :
2015-09-29 22:09:54

謝謝大家的解答。已解決!!

我覺得應該是我用整數變數去存取輸入值所造成的,只要超過20幾億就會錯誤

改用陣列存取後就沒問題了。