Как инициализировать динамический массив стилей c - PullRequest
1 голос
/ 12 марта 2011

Я работаю в target-c и выделяю динамический массив с плавающей точкой, но размер зависит от размера другого массива.Таким образом, мои ассигнования выглядят примерно так:

float myFloats[[myArray count]];

Все работает нормально, за исключением случаев, когда я выполняю аналитическую сборку в xcode.При использовании элемента массива вы получаете сообщение типа «Правильный операнд - это мусор»в учетную запись.

Кто-нибудь знает, как это сделать правильно?

    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

Ответы [ 2 ]

0 голосов
/ 13 марта 2011

Нажмите на флаг анализатора в редакторе исходного кода.Он покажет вам полный набор шагов, которым он следовал, чтобы прийти к выводу, что он должен помечаться.Вы, вероятно, забыли что-то инициализировать в каком-то случае.

Возможно, мы могли бы рассказать вам больше сами, если бы увидели ваш код.Вы можете отредактировать свой вопрос, включив в него реализацию соответствующего метода.

0 голосов
/ 12 марта 2011

Я не могу воспроизвести это предупреждение анализатора, используя следующий код, с или без 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...