2017-08-06 3 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; 
} 

上記のプログラムは、入力(すなわちn)が以下6.If I入力に等しいnは6以上であるまで、それはランタイムを示しているsmootly実行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へようこそ。変数nが初期化されておらず、初期化されていない変数を読み込み/使用するとUBになるので、malloc(n * sizeof(int))を実行すると、プログラムはundefined behaviour(UB)を呼び出します。

mallocに電話するとnの値はどうなると思いますか? nは負の値であってもかまいません。いったんあなたがUBを呼び出すと、あなたのプログラムが何をするのかは分かりません。 mallocに電話する前に、scanfに電話をかけてください。

お客様のmain機能はではなく、標準苦情です。 Why?次回以降は、あなたのコードを直接質問に入れてください。

+0

です。 ____________ –

+0

@PeterJどういう意味ですか? – babon

+0

それはあなたのことです 'メイン'の発言 –

関連する問題