0

Obj-c を使用して挿入ソート アルゴリズムを実装しようとしています。以下のコメント行を C から Obj C に変換しました (誰かが見て支援できる場合は、それらが正しいことを願っています)。しかし、アプリケーションは次のエラーでクラッシュします。キャッチされない例外 'NSRangeException' へ、理由: ' * -[NSMutableArray objectAtIndex:]: 境界 [0 .. 9] を超えたインデックス 4294967295'

-(IBAction)clicked_insertsort:(id)sender{

    NSMutableArray  *iarray = [[NSMutableArray alloc]initWithArray:garr];
    int n = [iarray count]  ;
    NSLog(@"%@",iarray);

    int i,j,x,k;

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

     {  
     j=i;  

     //x=a[i]; 
    x=[[iarray objectAtIndex:(NSUInteger)i]intValue];    

     //while(a[j-1]>x && j>0)  
     while ([[iarray objectAtIndex:(NSUInteger)j-1]intValue] >x && j>0)


     {  

     //a[j]=a[j-1];
    [iarray replaceObjectAtIndex: (j) withObject: [iarray objectAtIndex: (j-1)]];
     j=j-1;  
     }  

    // a[j]=x;  
    [[iarray objectAtIndex:(NSUInteger)j]intValue] == x; 

     }
    NSLog(@"%@",iarray);
}
4

1 に答える 1

1

インデックスを unsigned int にキャストすることは避けてください。一度に 1 つずつ試してみて、エラーを 4294967295 ではなく -1 に変更した方が問題のあるインデックスです

j が 0 に設定されると、インデックス -1 で iarray にインデックス付けされます。これを unsigned int にキャストすると、4294967295 に等しくなります。

于 2012-09-11T22:57:45.800 に答える