2014-02-24 55 views
0

我無法理解它爲什麼會顯示此錯誤。 我從來沒有遇到過這樣的錯誤。 這裏是我的代碼,你可以找出錯誤或它的原因:我在c程序中收到內存錯誤(coredump)錯誤消息?

#include<stdio.h> 
#include<math.h> 

void dec2bin(int n,int bin[1000]){ 
int num = 0, index = 0, i; 

while (n != 0){ 
bin[index] = n%2; 
index++; 
n = n/2; 
    } 

} 

int Sub(int a[100],int b[1000],int ac[100],int siz){ 
int i=siz-1,k=0; 

for(;i>=0;i--){ 

if(b[i]){ 

    a[k++]=ac[siz-i-1]; 
    } 
} 
return k; 
} 

int sum(int a[100],int s){ 

    int i,sum=0; 

for(i=0;i<s;i++) 
    sum+=a[i]; 
    return sum; 
} 

main(){ 
    int b[1000],sub[100],a[100],n,i,s,count=0; 

    printf("Enter n: "); 
    scanf("%d",n); 

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

    printf("Enter number %d",i+1); 
    scanf("%d",&a[i]); 
} 

printf("Enter S: "); 
scanf("%d",s); 

int no=(int)pow(2.0,(float)n); 

for (i=0;i<1000;i++) 
    b[i]=0; 

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

    dec2bin(i,b); 

    int siz=Sub(sub,b,a,n); 

    if(sum(sub,siz)==s) 
    count++; 
} 

printf("Subsets: %d",count); 

} 

而這個代碼立即顯示內存故障錯誤輸入的n值後。

+0

的valgrind的valgrind的valgrind – Dariusz

+1

'的scanf( 「%d」,n)的;'應該是'的scanf( 「%d」,&n);'啓用編譯器警告和理解他們的意思 – DaV

+0

您是否嘗試過使用調試器如果。? – Michael

回答

0

當輸入n時。

scanf("%d", &n); 

你忘了&

+0

哦..很抱歉...這真是一個愚蠢的錯誤。我現在是一個好時機。在發現錯誤的時候瘋了。 – user3346905

1

您使用scanf稍微不正確。

格式字符串後面的參數需要指向您的對象的指針,而不是對象本身。

scanf("%d", &n); 

請記住,雖然scanf是非常危險的使用。例如,如果整數溢出,則行爲未定義。最好安全地閱讀一行,然後使用strtol來解析它,因爲您可以正確檢測錯誤。