私は文字列とintの配列を扱うコードに取り組んでいます。int配列の並べ替えは、配列の内容を変更します
これはコンパイルしてOKを実行しますが、配列の内容は変更されます。
コードは、最も大きな数字である主な結果を示します。 しかし、ソート処理後、配列の内容が表示され、要素の1つが0に変更されます。 これはなぜですか?
よろしく、
あなたは[] 5であるARR2の合計要素を見ることができますが、あなたがしようとしているi=4,cr=4,ps=5
の.asなりループ値のための最後のステップの実行中にあなたのコードを実行して乾燥状態
#include<stdio.h>
#include<string.h>
#include<stdint.h>
int main()
{
static uint8_t arr2[]={5,100,-2,75,42},cr=0,ps=1,temp=0;
uint8_t i;
for (i=0;i<sizeof(arr2);i++)
{
printf("1stloop[%d]\n",i);
if (arr2[cr]>arr2[ps])
{
printf("before change1 cr %d ps %d\n",arr2[cr],arr2[ps]);
temp=arr2[cr];
arr2[cr]=arr2[ps];
arr2[ps]=temp;
printf("change1 cr %d ps %d\n\n",arr2[cr],arr2[ps]);
if (arr2[cr-1]>arr2[ps-1])
{
printf("before change2 cr %d ps %d\n",arr2[cr-1],arr2[ps-1]);
temp=arr2[cr-1];
arr2[cr-1]=arr2[ps-1];
arr2[ps-1]=temp;
printf("change2 cr %d ps %d\n\n",arr2[cr-1],arr2[ps-1]);
}
}
cr++; ps++;
}
for (i=0;i<sizeof(arr2);i++)
{
printf("contents %d \n",arr2[i]);
}
printf("\nLargest No. in arr2 of arr2 is %d \n",(arr2[sizeof(arr2)]));
return 0;
}
cr == 0のときにarr2 [cr-1]を使用しています。インデックス-1はあなたの配列の外にあります。また、ps == sizeof(arr2)== 5のときarr2 [ps]を使用しています。インデックス5も配列外です。最後に印刷する最大の数は、配列の外側のインデックス5からです。最大の数字をここに、つまり配列の外側に入れ替えた場合、ゼロになったガベージを配列に入れ替えました。 –
デバッガを使用してコードをステップ実行し、実際に何が起こっているかを確認します。 – alk
ありがとう、私はprintf( "OK")を追加します。どこに問題があるかを知るためにループを作成します。これは実際にはループカウンタに関するもので、現在は動作しています。 –