2011-03-12 20 views
1

私はobjective-cで作業しています。私は浮動小数点の動的配列を割り当てていますが、サイズは別の配列のサイズによって異なります。だから、私の割り当ては次のようになります。動的Cスタイルの配列を初期化する方法

float myFloats[[myArray count]]; 

xcodeで解析ビルドを行う場合を除いて、すべてはうまく動作しています。配列の要素を使用すると、「右オペランドが不要な値です」というメッセージが表示されます

すべての要素を初期化してゼロに設定しようとしましたが、analyzeコンパイラは考慮しません。

これを正しく行う方法は誰も知っていますか?

NSRect actualSuperFrame = [self frame]; 

//Here I initialize the float array. 
float clicksFromMiddle[[self.plannerViewArray count]]; 

NSRect actualPlannerFrame[[self.plannerViewArray count]]; 
PlannerView *plannerView; 
for(int i = 0; i < [self.plannerViewArray count];i++){ 
    plannerView = [self.plannerViewArray objectAtIndex:i]; 
    actualPlannerFrame[i] = [plannerView frame]; 


    //Below is where the values are set. 
    if (plannerView.isLeftPage) { 
     clicksFromMiddle[i] = (actualSuperFrame.origin.x + (actualSuperFrame.size.width/2.0))-NSMaxX(actualPlannerFrame[i]);    
    } 
    else{ 
     clicksFromMiddle[i] = (actualPlannerFrame[i].origin.x-(actualSuperFrame.origin.x + (actualSuperFrame.size.width/2.0)));    

    } 

} 





[super setFrame:frameRect]; 
NSRect modifiedPlannerFrame[[self.plannerViewArray count]]; 
for(int i = 0; i < [self.plannerViewArray count];i++){ 
    plannerView = [self.plannerViewArray objectAtIndex:i]; 
    modifiedPlannerFrame[i] = [plannerView frame]; 

    if(plannerView.isLeftPage){ 
     //This next line is where I get the message, right operand of "-" is garbage value 
     float newMaxX = (frameRect.origin.x +(frameRect.size.width/2.0))-clicksFromMiddle[i]; 
     float newWidth = newMaxX-modifiedPlannerFrame[i].origin.x; 


     [plannerView setFrame:NSMakeRect(modifiedPlannerFrame[i].origin.x, modifiedPlannerFrame[i].origin.y,newWidth , modifiedPlannerFrame[i].size.height)];   
    } 

enter image description here

答えて

0

私はとか、bzero()せずに、次のコードを使用して、このアナライザの警告を再現することはできません。私は意図的に配列の最後を読んで、何が0で初期化されているかを示します。問題を示すいくつかの追加コードを提供できますか?

NSArray *myArray = [NSArray arrayWithObjects:@"foo", @"bar", nil]; 
float myFloats[[myArray count]]; 
//bzero(myFloats, sizeof(myFloats)); 
myFloats[0] = 1.0; 

printf("%f\n", myFloats[0]); // 1.0 
printf("%f\n", myFloats[1]); // 0.0 
printf("%f\n", myFloats[2]); // random number 
0

ソースコードエディタでアナライザフラグをクリックします。それは、それが旗を立てるべき結論に達するためにたどった一連のステップ全体を示します。場合によっては何かを初期化するのを忘れているかもしれません。

コードが表示されているかどうかは、おそらくもっと詳しく説明できます。関連するメソッドの実装を含めるように質問を編集することができます。