2016-05-30 6 views
-1

ヒープを使用して配列を格納するプログラムを作成するプログラムを作成する必要があります。プログラムを正常に実行した後にプログラムがクラッシュするという問題があります。私もいくつかの小さな審美的な問題を抱えています。要素は1から始める必要があり、最後の数字はカンマなしで印刷されます。誰も助けることができますか?Cでユーザー定義の配列プログラムで問題が発生する

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

int main() 
{ 
    int size = 0; 
    int* num_elements; 
    num_elements = (int*)malloc(sizeof(int) * 3); 

    printf("How many int elements will you enter?"); 
    scanf("%d", &size); 
    printf("\n"); 

    for (int k = 0; k < size; k++) 
    { 
     printf("Element %d: ", k); 
     scanf("%d", &num_elements[k]); 
    } 

    printf("\n"); 

    printf("The Array stores the following values: \n\n"); 

    for (int j = 0; j < size; j++) 
    { 
     printf("%d, ", num_elements[j]); 
    } 

    printf("\n");  
    free(num_elements);  
    num_elements = 0;  
    return 0; 
} 
+2

@ PinkPanther11222:彼はあなたに間違って言った。初期化は定義で行われます(「初期」も含まれます)。それ以外は初期設定ではなく、割り当てです。 (しかし、初心者の方はPC上でも良い練習です) – Olaf

+0

@Olafありがとうございます。今後の参考のために覚えておきます – PinkPanther11222

+0

プログラムを書くプログラムを書く必要がありますか?プログラムを書くだけですか? –

答えて

1

ユーザーが3以上の値を入力すると、範囲外のメモリが使用されてしまいます。動的メモリ割り当てを使用しているときは、それを最大限に活用してください。ユーザからsizeの値を掲載し、その後、1からの番号の要素を印刷するには、次に

int* num_elements; 

printf("How many int elements will you enter?"); 
scanf("%d", &size); 

num_elements = malloc(size * sizeof *num_elements); 

ようmalloc()を呼び出すためにそれを使用する、あなたが言った

printf("Element %d: ", k+1); 

ようにそれを書くことができます
  1. Please see this discussion on why not to cast the return value of malloc() and family in C.
  2. 成功するためには、必ず戻り値のmalloc()を確認してから使用してください。
+0

ありがとうございます。私のコードは今働いています。私はCのことがかなり新しいので、その議論を見ていきます。 – PinkPanther11222

+0

はい、ダウンボートの背景にある理由は? –

関連する問題