tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von deepthroat
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
764
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Hallo zusammen,

    ich hänge gerade an einem ganz kuriosen Problem :

    Ich deklariere eine Variable "iAnz" und weise ihr dabei gleich den Wert einer anderen Integer-Variablen zu.
    Diese Variable wird dann innerhalb einer while-Schleife benutzt.

    Wie man im jedoch im Anhang sieht (Ausschnitt bei Debuggen) hat iAnz zu Beginn der Schleife stumpf den Wert "0" - und nicht "136", wie erwartet!

    Ich habe schon das gesamte Projekt komplett neu erstellen lassen, aber das ändert nix ....

    Hat jemand eine Idee, was das für eine Sch.... ist

    Danke und Gruß
    Klaus
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken seltsamer Fehler bei Deklaration einer int-Variable-zuweisungserror.jpg  
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    Hast du denn mit Optimierungen kompiliert? Das kann den Debugger manchmal etwas durcheinander bringen (loop unrolling evtl?).

    Wird denn dann trotzdem in die Schleife reingegangen? Bzw. funktioniert die Suche denn nicht?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Hi deepthroat,

    Zitat Zitat von deepthroat Beitrag anzeigen
    Hast du denn mit Optimierungen kompiliert? Das kann den Debugger manchmal etwas durcheinander bringen (loop unrolling evtl?).
    Wird denn dann trotzdem in die Schleife reingegangen? Bzw. funktioniert die Suche denn nicht?
    Nein, Optimierung ist deaktiviert (/0d) ....

    Nein, die Schleife wird auch nicht durchlaufen, wodurch einiges was danach passiert, durch die fehlerhafte Berechnung von "nRowCount" durcheinander kommt.
    Seltsamerweise fiel das Ganze in der Releaseversion vor ca. 2 - 3 Std. auf, ohne dass ich in diesem Bereich des Code etwas geändert hatte ...

    Ich habe inzwischen noch eine zweite Stelle entdeckt, an der ähnliches passiert :
    Code cpp:
    1
    2
    3
    
    for( int k = 0; k < iZaehler; k++ )
    {
    ...
    Auch diese Schleife wird nicht durch laufen, obwohl mir der Debugger für "iZaehler" den Wert 136 anzeigt ....

    Gruß
    Klaus

    edit: das Ganze wird noch lustiger ....

    Ich habe jetzt mal die Schleife direkt mit iZaehler aufgerufen (warum auch extra zuweisen).
    Obwohl der Wert lt. Debugger wiederum 136 ist (siehe Anhang), geht das Programm NICHT in die Schleife .....

    Gruß
    Klaus
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken seltsamer Fehler bei Deklaration einer int-Variable-error-2.jpg  
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Junge, junge ... hab' den Fehler gefunden - das war ganz böse

    Folgende Änderung an der ersten for-Schleife war entscheidend:

    Die Deklaration der beiden Variablen "nColCounter" und "iZaehler" ist im Zuge der Umstellung von VS6 auf VS2010 VOR die Schleife gezogen.
    Also muss es jetzt statt :
    Code cpp:
    1
    2
    3
    4
    
            int nColCounter = 0;
            int iZaehler = 0;
            for( int i = 0, nColCounter = 0, iZaehler = 0; i < nTextLaenge; i ++)
            {

    so lauten :
    Code cpp:
    1
    2
    3
    4
    
            int nColCounter = 0;
            int iZaehler = 0;
            for( int i = 0; i < nTextLaenge; i ++)
            {

    Irgendwie geht sonst wohl der Speicher über die Wupper

    Na ja, dann kann ich ja wenigstens beruhigt ins WE gehen!

    Nochmals Danke und tschüss
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Junge, junge ... hab' den Fehler gefunden - das war ganz böse

    Folgende Änderung an der ersten for-Schleife war entscheidend:

    Die Deklaration der beiden Variablen "nColCounter" und "iZaehler" ist im Zuge der Umstellung von VS6 auf VS2010 VOR die Schleife gezogen.
    Also muss es jetzt statt :
    Code cpp:
    1
    2
    3
    4
    
            int nColCounter = 0;
            int iZaehler = 0;
            for( int i = 0, nColCounter = 0, iZaehler = 0; i < nTextLaenge; i ++)
            {

    so lauten :
    Code cpp:
    1
    2
    3
    4
    
            int nColCounter = 0;
            int iZaehler = 0;
            for( int i = 0; i < nTextLaenge; i ++)
            {

    Irgendwie geht sonst wohl der Speicher über die Wupper
    Das ist natürlich Unfug. Da passiert nichts mit dem Speicher.

    Du hast einfach innerhalb der Schleife eine neue Variable namens iZaehler definiert welche die Variable vor der Schleife überlagert. Ganz normales C++.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  6. #6
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Hi deepthroat,

    Zitat Zitat von deepthroat Beitrag anzeigen
    Das ist natürlich Unfug. Da passiert nichts mit dem Speicher.
    Du hast einfach innerhalb der Schleife eine neue Variable namens iZaehler definiert welche die Variable vor der Schleife überlagert. Ganz normales C++.
    Hmm, aber wieso sollte die Variable VOR der Schleife überlagert werden ?

    Ich habe im Rahmen der Umstellung etliche Stellen wie diese umbauen müssen :
    Code cpp:
    1
    2
    3
    4
    5
    
    if( int i = 0; i < 10; i++ )
    {
    // ...
    }
    i += 42;  <-- hier meckerte der Compiler jedesmal, das 'i' nicht deklariert ist !!

    Klingt für mich so, dass hier das 'i' nur einen Gültigkeitsbereich innerhalb der for-Schleife hat, oder ?

    Warum beeinflusst also im Beispiel oben die neue Variable 'iZahler' aus dem Kopf der Schleife den zuvor deklarierte Variable ****

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  7. #7
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Hmm, aber wieso sollte die Variable VOR der Schleife überlagert werden ?

    Ich habe im Rahmen der Umstellung etliche Stellen wie diese umbauen müssen :
    Code cpp:
    1
    2
    3
    4
    5
    
    if( int i = 0; i < 10; i++ )
    {
    // ...
    }
    i += 42;  <-- hier meckerte der Compiler jedesmal, das 'i' nicht deklariert ist !!
    Ja, das ist auch völlig korrekt so. (das Gemecker)
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Klingt für mich so, dass hier das 'i' nur einen Gültigkeitsbereich innerhalb der for-Schleife hat, oder ?
    Ja, allerdings => C++ Standard (klingelt da was? )
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Warum beeinflusst also im Beispiel oben die neue Variable 'iZahler' aus dem Kopf der Schleife den zuvor deklarierte Variable ****
    Das sind nunmal die C++ Regeln.

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    int foo = -33;
    {
      int foo = 5; // überlagert foo in äußerem Skopus
      {
         int foo = 36;  // überlagert foo in äußerem Skopus
      }
    }
    cout << foo; // druckt -33
    for (int foo = 3, i = 0; i < 5; ++) {
      cout << foo; // druckt 3
    }
    cout << foo; // druckt immer noch -33
    Gruß
    Geändert von deepthroat (04.11.11 um 15:31 Uhr)
    vfl_freak bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  8. #8
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Hi,

    Zitat Zitat von deepthroat Beitrag anzeigen
    Ja, das ist auch völlig korrekt so. (das Gemecker)
    ja ja, schon klar

    aber ....

    Zitat Zitat von deepthroat Beitrag anzeigen
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    
    int foo = -33;
    cout << foo; // druckt -33
     
    for (int foo = 3, i = 0; i < 5; ++) 
    {
      cout << foo; // druckt 3
    }
    cout << foo; // druckt immer noch -33
    Eben - das war ja auch genau das, was ich erwartet habe, was aber bei meinem Fehler nicht so war !
    Nach der for-Schleife zeigte mir der Debugger den erwarteten Wert von "iZaehler" an, nur warum lies er sich dann nicht auf "iAnz" zuweisen resp. im Kopf der while-Schleife verwenden?
    Verstehe ich jetzt nicht so ganz ....

    EDIT:
    oder andersrum gefragt: wenn in dem Moment "iZaehler" noch '0' war, wieso zeigte mir der Debugger dann den scheinbar richtigen Wert an ? ? ?

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  9. #9
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Eben - das war ja auch genau das, was ich erwartet habe, was aber bei meinem Fehler nicht so war !
    Dann zeig doch mal deinen Code.
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Nach der for-Schleife zeigte mir der Debugger den erwarteten Wert von "iZaehler" an, nur warum lies er sich dann nicht auf "iAnz" zuweisen resp. im Kopf der while-Schleife verwenden?

    Verstehe ich jetzt nicht so ganz ....

    EDIT:
    oder andersrum gefragt: wenn in dem Moment "iZaehler" noch '0' war, wieso zeigte mir der Debugger dann den scheinbar richtigen Wert an ? ? ?
    Achtung, Blasphemie: ein Fehler im Debugger?

    Evlt. hast du einfach die falsche Variable inspiziert? Wenn die den gleichen Namen haben sind die nur schwer auseinander zu halten. Adresse der Variablen wäre interessant gewesen.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  10. #10
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    Zitat Zitat von deepthroat Beitrag anzeigen
    Achtung, Blasphemie: ein Fehler im Debugger?

    Evlt. hast du einfach die falsche Variable inspiziert?
    Wenn die den gleichen Namen haben sind die nur schwer auseinander zu halten. Adresse der Variablen wäre interessant gewesen.
    Möglicherweise ...

    Nun ja, das Problem ist ja erkannt und gelöst, so dass ich mich erstmal mit anderen Dingen beschäftigen muss !

    Danke und Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

Ähnliche Themen

  1. Seltsamer / Unbeschreiblicher Fehler
    Von styler2go im Forum PHP
    Antworten: 4
    Letzter Beitrag: 06.07.10, 17:43
  2. Antworten: 7
    Letzter Beitrag: 23.07.09, 12:54
  3. seltsamer Fehler bei Mac
    Von Leugim im Forum HTML & XHTML
    Antworten: 7
    Letzter Beitrag: 19.04.06, 22:08
  4. Seltsamer Fehler ...
    Von _voodoo im Forum PHP
    Antworten: 2
    Letzter Beitrag: 14.01.05, 12:51
  5. Seltsamer Fehler
    Von Moritz123 im Forum PHP
    Antworten: 3
    Letzter Beitrag: 21.07.03, 19:44