2017-01-18 11 views
1

arrayTwelveLEngth変数が期待どおりに機能していません。私が量= 1にブレークポイントを置いたとき、私はarrayTwelveの上に横たわり、0要素で空であることがわかりました。その直後、私はarrayTwelveLengthの値が0であると予想してarrayTwelveLengthについて調べましたが、代わりにarrayTwelveLengthの値が1876662112だったようです。その値がどうなっているのかわかりません。私は間違って何をしていますか?myArray countが期待通りに機能していません

NSMutableArray *redValues = [NSMutableArray array]; 
NSMutableArray *arrayTwelve = [NSMutableArray array]; 
__block int counter = 0; 
__block NSInteger u; 
NSUInteger redValuesLength = [redValues count]; 
__block int arrayTwelveLength = 0; 
__block float diffForAverage, fps, averageTime, bloodSpeed;  
float average; 
__block int amount = 1; 
__block float totalTwelve, totalThirteen; 
__block NSUInteger totalNumberOfFramesInSmallArrays = 0; 
__block NSUInteger totalNumberOfFramesNotInSmallArrays; 

for (u = (counter + 24); u < (redValuesLength - 24); u++) 
    { 
     diffForAverage = average - [redValues[u + 1] floatValue]; 
     float test = [redValues[u] floatValue]; 
     arrayTwelveLength = [arrayTwelve count]; 
     if (diffForAverage > -1 && diffForAverage < 1) 
     { 
      totalTwelve += [redValues[u + 1] floatValue]; 
      amount++; 
      [arrayTwelve addObject:@(test)]; 
      counter++; 
     } 

     else 
     { 
      if (arrayTwelveLength >= 8) 
      { 
       counter++; 
       break; 
      } 

      else 
      { 
       [arrayTwelve removeAllObjects]; 
       totalTwelve = [redValues[u + 1] floatValue]; 
       counter++; 
       amount = 1; 
      } 
     } 
    } 

    amount = 1; // I added a breakpoint here 
    totalThirteen = [redValues[u + 1] floatValue]; 
    average = totalThirteen/amount; 
    if (counter == redValuesLength) 
    { 
     totalNumberOfFramesNotInSmallArrays = redValuesLength - totalNumberOfFramesInSmallArrays - 25 - (redValuesLength - counter); 
     fps = redValuesLength/30; 
     averageTime = totalNumberOfFramesNotInSmallArrays/fps; 
     bloodSpeed = 3/averageTime; 

     [_BloodSpeedValue setText:[NSString stringWithFormat:@"%f", bloodSpeed]]; 
    } 

    if (arrayTwelveLength == NULL) 
    { 
     arrayTwelveLength = 0; 
    } 

    totalNumberOfFramesInSmallArrays += arrayTwelveLength; 
+0

ブロック変数を使用するものを除き、urコードは正しいです。ブロックメソッド以外の値が必要な場合にのみ使用するブロック変数です。ブロックnチェックを一度削除してください(示唆)。 – Pavankumar

答えて

1

あなたは符号なし/署名の種類とし、データに問題があっても入るべきではないループの最初に設定されているので、あなたのループインデックス変数u(== 24)<(redValuesLength(== 0) - 24)しかし、redValuesLengthがunsigned型であることので、それが周りにラップし、あなたが得る:

(0)符号なしlong - )長い(符号なし24 = -24モジュロULONG_MAX + 1 = 18446744073709551592

また、あなたは初期化されていません使用前にaverage

+0

私のコードで何を変更する必要がありますか? – fi12

+0

これは、あなたが達成しようとしていることによって異なります。私はあなたの 'のために'の条件の理由を完全に理解していません。それがうまくいくためには、単純なキャストで十分であるはずですが、それでなぜあなたが '__block'修飾子を使うのか疑問が残っています:for(u =(counter + 24); u <((NSInteger )redValuesLength - 24); u ++) ' – Mindaugas

関連する問題