2016-05-27 8 views
2

このコードを使用して配列dataの値を挿入しましたが、値8 1 2 3 4 5 6 7 8(最初の数値は配列のサイズです)を挿入しようとすると、出力は00000000入力値1 2 3 4 5 6 7 8。どのように私はプログラムを動作させることができますか?mallocを使用して配列の値を挿入する

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
    int n,i,*data; 

    scanf("%d", &n); 

    data=(int *)malloc(sizeof(int)*n);//data[size] 

    for(i=0;i<n;i++) 
    { 
    scanf("%d", &data[i]); 
    } 

    for(i=0;i<=n;i++) 
    printf("%d",data[n]); 
    printf("\n"); 

    return 0; 
} 
+1

あなたは誤植 'のprintf( "%dの"、データ[N])を有し;' - > 'のprintf( "%dの"、データ[I])を、' – LPs

+1

私はあなた自身に好意を持ち、デバッガの使い方を学ぶことをお勧めします。このような些細な間違いをすばやく見つけるのに役立ちます。 – user694733

+0

また、 'i <=n' -->' i Lundin

答えて

2

あなたはこの部分を変更する必要があります。

for(i=0;i<=n;i++) 
    printf("%d",data[n]); 
    printf("\n"); 
    return 0; 
} 

に:

for(i = 0; i < n; i++) 
    printf("%d",data[i]); 
    printf("\n"); 
    return 0; 
} 

あなたが今反復が、可変i指標として使用されていません何。代わりに、常にdata[n]だけを印刷しようとします。 に、配列のインデックスは0から開始し、nは、配列のサイズである、n-1に達し、これは境界のうち、インデックスにアクセスしています。これにより、プログラムの[tag:undefined-behavior]が発生する可能性があります。

だからあなたforループがなければならないだろう、次のいずれか

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

か:

for(i = 0; i <= n-1; i++) 

をまた、このlink on why you should not cast the result of mallocに見てみましょう。また、このように、あなたは常にmallocの結果を確認することを確認してください:n-1まで行く必要はありませnあなた

  • ループとして

    data=malloc(sizeof(int)*n); 
    if (data == NULL) 
        printf("Error in dynamically allocating memory.\n"); 
    
  • 2
    1. printループをインデックスとしてiを使用しなければなりません、正しい条件はi<nである必要があります。あなたのコードは、呼び出す範囲外の「配列」にアクセスします。Undefined Behavior
    2. 関数の戻り値を常にチェックする必要があります。
    3. サイドノート:you shouldn't cast malloc returnです。

    コード

    #include<stdio.h> 
    #include<stdlib.h> 
    
    int main() 
    { 
        size_t n,i; 
        int *data; 
    
        printf("Insert number of items: "); 
        scanf("%zu", &n); 
    
        data=malloc(sizeof(int)*n); 
    
        if (data != NULL) 
        { 
         for(i=0;i<n;i++) 
         { 
          printf("Insert value for item %zu: ", i+1); 
          scanf("%d", &data[i]); 
         } 
    
         printf("You inserted: "); 
    
         for(i=0;i<n;i++) 
          printf("%d ",data[i]); 
        } 
        else 
        { 
         fprintf(stderr, "Failed allocating memory\n"); 
        } 
    
        printf("\n"); 
    
        return 0; 
    } 
    
    関連する問題