2010-04-22 92 views
-1

,我會很高興知道我爲什麼在codechef.com得到這個錯誤的問題http://www.codechef.com/problems/AXR1P2和我的代碼是...運行時錯誤(SIGSEGV)

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
int *num=0,n=0,i=0,max=0;char *s=""; 
int sum[9]={1,5,14,20,25,31,32,38,39},dsum[9]={1,7,8,14,19,25,26,32,33},unitdig=0; 
do 
{ 
    gets(s); 
*(num+i)=(int)atoi(s); 
i++; 
}while(*s!='#'); 
max=i; 
for(i=0;i<max-1;i++) 
{ 
n=*(num+i); 
if(n>10) 
    unitdig=33*(n/10-1)+39+dsum[(n%10)-1]; 
else 
    unitdig=sum[(n%10)-1]; 
    printf("%d\n",unitdig%10); 
} 
getchar(); 
return 0;} 
+0

未來,如果您嘗試在您自己的代碼中進行調試,然後再將代碼轉儲到此處,我們將更容易幫助您(並且更容易幫助您)。你應該(在一份副本中,將原文備份到某處)消除代碼,直到你縮小了導致錯誤的原因,然後嘗試找出錯誤發生的原因。我們可以通過這種方式更快更徹底地幫助你。 – 2010-04-22 10:13:29

+0

此外,如果源代碼至少格式化,它也將對回答您的問題的人非常有幫助 – akst 2016-07-30 07:17:24

回答

3

幾個錯誤:

char * s = ""; 
... 
gets(s); 

你想讀入一個字符串,你想:

char s[SOMESIZE]; 

而且你還沒有初始化NUM點任何東西,所以在:

*(num+i)=(int)atoi(s); 

你是解引用空指針。可能還有其他問題 - 這些是我發現(幾乎)立即發現的兩個問題。

+0

我認爲segfault是個人獲得的,但這也是糟糕的。 – 2010-04-22 10:07:22

+0

@Chris是的,我點擊發送按鈕後立即發現。 – 2010-04-22 10:09:17

+0

還要注意,OP應該**從不**使用'gets()'。 – 2010-04-22 10:11:10

0

你有一個不指向分配空間的int指針(num)。對這個指針的任何訪問都會導致意外的行爲。