2017-05-01 24 views
-1

xcode Macで簡単なC言語の練習をしています0x600000000のメモリ読み込みに失敗しました

これは単純なバブルソートアルゴリズムです。

私はコード には論理的または文法エラーがないと思いますが、私は

エラーをデバッグした後にエラー警告を参照してください:「メモリが0x600000000

のために失敗した読み取りが多分これは、メモリの問題についてですが、私はドン について何を意味するのかを知り、警告メッセージなしでこの問題を解決できる方法

PS:私は日本語の母国語ではありません。事前に私の下手な英語を理解いただき、ありがとうございます:)

int p[]={0},i,j,num,temp; 

printf("number: "); 
scanf("%d",&num); 

for(i=0;i<num;i++) 
    scanf("%d",&p[i]); 

printf("arry numbers show-----"); 
printf("\n"); 
for(i=0;i<num;i++) 
    printf("%d ",p[i]); 
printf("\n"); 

for(i=0;i<num;i++) 
{ 
    for(j=0;j<num-1;j++) 
    { 
     if(p[j]>p[j+1]) 
     { 
      temp=p[j]; 
      p[j]=p[j+1]; 
      p[j+1]=temp; 
     } 
    } 
} 

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

'p'には1つの要素しかありません(' int p [] = {0} ')。 – BLUEPIXY

+3

これは、 'int p [] = {0}'は単一の要素0を含むサイズ1の配列を作成します。配列はC配列であり、それ以降は拡大しません。あなたは、配列の実際のサイズが分かっているときに十分なスペースを割り当てたり、サイズnum_after_ scanning numの可変長配列(VLA)を作成することができます。 –

+0

分かりました 。私はC配列が成長すると思った。大変ありがとうございました! – jihoon

答えて

0

あなたが明示的に一つだけの要素を持つ配列int p[]={0}を初期化してきました。並べ替えの場合は、既にソートされていることを意味する要素が1つしかない場合です。配列Arrays documentationのこの文書を参照してください。

+0

貴重なご意見ありがとうございます!私はリンクをチェックアウトするつもりだ – jihoon