Toon posts:

[Objective C] - Ik die iets stoms maar ik zie het niet.

Pagina: 1
Acties:

Onderwerpen


  • TumbleCow
  • Registratie: januari 2000
  • Laatst online: 14-10 15:10

TumbleCow

Waarschijnlijkheids elastiekje

Topicstarter
Ik heb de volgende situatie:

code:
1
2
3
4
5
6
7
8
9
- (void) processAllPastDataForStatistics  {
            float val = 23;// [[event batteryLevel] floatValue];
            [self updateStatistics:val];
            NSLog(@"value %f",val);
}

- (void) updateStatistics:(float) val  {
    NSLog(@"%f",val);
}


For some reason, geeft de NSLog in de 'updateStatistics' functie '0', terwijl de NSLog in de processAllPastDataForStatistics() wel netjes '23' geeft.
Dit is zo'n enorm simpel probleem dat ik wel iets heel stoms over het hoofd moet zien, maar het ontgaat me. Enig idee?

  • TumbleCow
  • Registratie: januari 2000
  • Laatst online: 14-10 15:10

TumbleCow

Waarschijnlijkheids elastiekje

Topicstarter
En.. Naar er inmiddels een uur naar gestaard te hebben los ik het zelf 'op', 2 minuten nadat ik het dan toch maar op GoT ga vragen.

Vreemd genoeg, werkt de volgende code wel:
code:
1
2
3
4
5
6
7
8
9
- (void) updateStatistics:(float) val  {
    NSLog(@"%f",val);
}

- (void) processAllPastDataForStatistics  {
            float val = 23;// [[event batteryLevel] floatValue];
            [self updateStatistics:val];
            NSLog(@"value %f",val);
}

Iow: Alleen het omwisselen van de functies in de source-file lost het probleem op.

Natuurlijk klopt het dat ik de 'updateStatistics' functie bovenaan moet zetten: Ik declareer de functie nergens, en er is een risico dat compiler de functie niet kan vinden.
Het bijzondere is nu dat de compiler de functie prima vindt. In een debugger, kan ik zelfs netjes door de functie heen lopen. Het enige dat mis gaat, is dat de 'val' een dangling pointer wordt. Weird.

  • TumbleCow
  • Registratie: januari 2000
  • Laatst online: 14-10 15:10

TumbleCow

Waarschijnlijkheids elastiekje

Topicstarter
Bedankt voor het meedenken!
MacWolf schreef op vrijdag 05 november 2010 @ 18:46:
Edit: ik zie dat je op hetzelfde moment gepost hebt als ik, nou ja net iets eerder :). Zijn beide functies in de header gedefinieerd?
Nee, dat zijn ze niet, en dat is dan ook het probleem. ;)
Edit 2: als je niet duidelijk een getal als float definieert d.m.v. de .0f notatie, dan is de kans groot dat de compiler er een integer van maakt. Als je daarna het getal als parameter naar een andere functie doorgeeft, krijgt deze dus een integer en kan het niet meer terug converteren naar de originele waarde. Voor de veiligheid, zorg er altijd voor dat als je een float definieert, dat deze de .0f notatie gebruikt.
Ik snap dat het hier nu anders lijkt, maar ik ben een redelijk ervaren programmeur, en ben dus wel bekend met de problemen bij conversie tussen float en int. Dit is iets meer dan een afrondingsfoutje. :)

Het lijkt er op dat de compiler (LLVM 1.5) wel de functie kan resolven, ookal is hij later gedefinieerd als de call. Fancy.
However, het resolven van de parameters van de functie gaat mis, en de parameter wordt een dangling pointer. Hoewel het aanroepen van een niet gedefinieerde functie een programmeerfout (van mij :P) is, beschouw ik dit gedrag als een fout in de compiler.

  • TumbleCow
  • Registratie: januari 2000
  • Laatst online: 14-10 15:10

TumbleCow

Waarschijnlijkheids elastiekje

Topicstarter
Grappig, bedankt voor de verduidelijking. Ik ben er zelf nooit eerder tegenaan gelopen, en het is duidelijk dat ik na een jaar op een java-project een verwend nest geworden ben. ;)
Soultaker schreef op vrijdag 05 november 2010 @ 19:34:
Dit heeft niets met dangling pointers te maken.
Nee, dat begrijp ik nu. Het gedrag leek hier op, omdat ik in de 'echte' implementatie allerlei seemingly ongerelateerde nummers in mijn functie kreeg, maar mijn interpretatie van wat er mis ging was way off.

Geen compiler bug dus, maar gewoon een tijs-bug. - Type-safety is for wussies anyway. :P

[Voor 7% gewijzigd door TumbleCow op 05-11-2010 23:55]


  • TumbleCow
  • Registratie: januari 2000
  • Laatst online: 14-10 15:10

TumbleCow

Waarschijnlijkheids elastiekje

Topicstarter
Soultaker schreef op zaterdag 06 november 2010 @ 00:06:
(Maar het is nog steeds nuttig om te weten hoe argumenten gepasst worden, omdat dat bij variable argumenten van een functie op dezelfde manier gebeurt.)
Absoluut! - Ik snap liever wat er gebeurt in plaats van dat ik mijn handen in de lucht gooi en roep: 'Wat heeft C nu weer gedaan!'.
Dus, daarvoor mijn dank. :)
Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee