Variable wird Müll in Schleife?



  • Abend,

    ich stehe gerade vor einem totalen Rätsel. Ich habe folgende Schleife:

    float t=0;
    
    for(uint i=0; i < iterations; i++, t += mHeightmap.getScaleXZ() * 10) {
       samplePoint = ray.getPoint(t);
    
       heightTerrain = mHeightmap.sampleHeight(isInsideHeightmap, samplePoint.x, samplePoint.z);
    
       if(!isInsideHeightmap)  {
          return false;
       }
    
       if(heightTerrain > samplePoint.y) {
    
          float t1 = t - mHeightmap.getScaleXZ();
          ...
    

    Es geht um die Variable t, die außerhalb der Schleife definiert wird. Es passiert beim Ablauf meines Codes jetzt folgendes: t wird in jedem Durchlauf erhöht (siehe Schleifenkopf) und irgendwann ist dann heightTerrain > samplePoint.y erfüllt und er geht in den if-Zweig. Sobald er in den Zweig geht, steht in t totaler Müll! Ich bin im Debugger durchgegangen und da sah es so aus: t ist gerade 1100, jetzt geht er in den if zweig if(heightTerrain > samplePoint.y)und t springt auf den Wert -1.0737418e+008! Wie kann das sein? 😕



  • hast d noch ein t im if?



  • Auf den ersten Blick habe ich nichts gesehen, und auf den zweiten sehe ich auch nichts. Hast du den operator > für den Typen des Objekts heightTerrain überladen und dabei einen Seiteneffekt nicht berücksichtigt? Was gibt denn mHeightmap.getScaleXZ(); in Zeile 14 zurück?


  • Mod

    wie sieht es mit der Signatur von ray.getPoint aus?
    wo werden die anderen Variablen definiert?
    Wie sieht die vollständige Schleife aus?
    Welcher Assembler Code wird dazu generiert?


Anmelden zum Antworten