2017-08-06 86 views
-1
https://i.stack.imgur.com/kU6lD.png

爲什麼在這個程序運行時錯誤取決於輸入值?

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
    int i,n,*a=(int*)malloc(n*sizeof(int)); 
    scanf("%d",&n); 
    for(i=0;i<n;++i) 
    scanf("%d",(a+i)); 
    for(i=0;i<n;++i) 
    printf("%d",*(a+i)); 
    free(a); 
    return 0; 
} 

上述程序運行smootly直到輸入(即,n)小於或等於6。如果我輸入的n大於6則示出了運行時error.WHY?這裏運行時錯誤取決於輸入

+0

您使用的未初始化的變量'N'的值分配內存。在**'scanf()'之後''malloc()'需要放**。 – m0h4mm4d

+0

我建議你把你的代碼裏面的問題,而不是上傳爲圖像。在SO中有一個代碼標籤,它對於c代碼來說工作得非常好。 – m0h4mm4d

回答

0

的??)值試試這個在頂部:

int i = 0; 
int n = 0; 
int *a = NULL; 
scanf("%d", &n); 
if(n > 0) { 
    a = (int*)malloc(n * sizeof(int)); 
    if(!a) { 
     printf("malloc failed"); 
     return 0; 
    } 
} 
else { 
    printf("enter number > 0"); 
    return 0; 
} 
-1

歡迎SO。你的程序調用undefined behaviour(UB),當你做malloc(n * sizeof(int)),因爲變量n沒有初始化,讀/使用UB未初始化變量的結果。

你覺得當你調用mallocn值會是什麼? n甚至可能是一個負值。一旦你調用UB,就不知道你的程序會做什麼。你應該把你給scanf呼叫你打電話之前malloc

您的main功能是不是標準投訴。 Why?從下次請將您的代碼直接放在問題中。

+0

就是這樣。 ____________ –

+0

@PeterJ你是什麼意思? – babon

+0

它是關於你'main'此話 –

相關問題