2016-12-30 5 views
0

整数 "number"に割り当てられた最初の値がR配列に割り当てられると、プログラムがクラッシュします。おそらく、私が作成したポインタと何か関係があり、問題の原因を見つけることができないようです。おそらく間違ったメモリの使用セグメンテーションフォールト

else{ 
    while (k<=n/2){ 
     temp2=R[k]; 
     R[l-1]=temp2; 
     R[k]=R[l-1];} 
     l-=1; 
     k+=1; 
    } 

この部分を省略すると、出力が異なる場合でもプログラムは正常に実行されます。コードは以下のとおりです。

#include <stdio.h> 

main(){ 
    int i,n,number,temp,j,k=0,l,temp2; 
    int *R; 

    R=(int *)malloc(n*sizeof(int)); 

    printf("Dwse mou to megethos tou pinaka se parakalw poly:\n"); 
    scanf("%d", &n); 
    for(i=0; i<n; i++){ 
      printf("Dwse enan thetiko akeraio arithmo:\n"); 
      scanf("%d", &number); 
      R[i]=number; 
    } 
    for(i=1;i<n;i++){ 
     temp=R[i]; 
     j=i-1; 
     while((temp>R[j])&&(j>=0)){ 
      R[j+1]=R[j]; 
      j=j-1; 
     } 
     R[j+1]=temp; 
    } 
    l=n; 
    if (n%2==0) 
     printf("Einai adynato na ginei h taksinomhsh:\n"); 
    else{ 
     while (k<=n/2){ 
      temp2=R[k]; 
      R[l-1]=temp2; 
      R[k]=R[l-1];} 
      l-=1; 
      k+=1; 
     } 
    for(i=0; i<n; i++){ 
      printf("R[%d]: %d\n", i, R[i]); 
     } 

} 

ありがとうございます。

+1

'R =(int *)malloc(n * sizeof(int));' scanf( "%d"、&n); '。 – BLUEPIXY

+1

の後に移動すると、変数nを使用して配列Rを割り当てます。 –

+0

よく、ありがとう、私のnoobishnessのためにそのような質問をするために私を許してください。 – Achilles

答えて

2
int i,n,number,temp,j,k=0,l,temp2; 
int *R; 

R=(int *)malloc(n*sizeof(int)); 

nにはどのような値がありますか?初期化されていないので、の定義されていない動作をCのlingoで呼び出します。何かが起きる可能性があり、クラッシュが1つです。

+0

ありがとうございました!それは本当に問題でした。 – Achilles

+0

@Achilles Wonderful。スタックオーバーフローの次のステップは、左にある緑色のチェックマークをクリックすることで最も役立つ答えを受け入れることです。これはあなたにいくつかのポイントを与えるでしょう。 – Jens

関連する問題