Ursache für Programmabsturz?



  • So ganz verstehe ich das nicht, meine Version macht das hier:

    Vector:
    0|0

    Prüfe Differenz, 4 Sekunden aha;

    Vector:
    0|0
    1|0
    2|0
    3|0
    4|1

    Prüfe Differenz, nochmal 4 Sekunden also;

    Vector:
    0|0
    1|0
    2|0
    3|0
    4|2

    Prüfe Differenz, diesmal 9 Sekunden also;

    Vector:
    0|0
    1|0
    2|0
    3|0
    4|2
    5|0
    6|0
    7|0
    8|0
    9|1

    Vielleicht noch einmal anders für mich formulieren 🙂 🤡 ?



  • Wo wird denn size eigentlich inkrementiert?



  • ach du kacke mir kommt da ein verdacht moment 😃



  • ok war ein fehler aber nicht DER fehler

    int size = 0;
    	for(string Read; getline(playerLogfile, Read);)
    		{
    			time.Set_Read_String(Read);
    
    			if(Rounding(time.Get_Time_Difference()) > size)
    			{
    				size = Rounding(time.Get_Time_Difference());
    				elements.resize(size+1);
    			}
    
    			elements[Rounding(time.Get_Time_Difference())]++;
    		}
    

    So siehts nun aus



  • Tust du mal nen Debugger verwenden tun. Das tut helfen tun.



  • Also schaut der Code jetzt auf dem ersten zweiten und dritten blick richtösch aus?



  • So ganz raff ich eh nicht, was du da machst:

    Get_Time_Difference() liefert doch die Differenz zwischen
    jetzigem und vorherigem Aufruf, oder?!
    Also sind doch solche Rückgaben wahrscheinlich:

    12, 5, 23, 11, ...

    Also erst ist dein Vektor 12 Elemente lang, dann wird er auf 5 verkürzt,usw..
    Das ist doch so nicht gewollt.
    Falls nur aufsteigende Werte vorkommen können, dann kannst du
    dir das mit dem size auch sparen und direkt den Rückgabewert + 1
    nehmen.

    Jockel



  • Checkline schrieb:

    Also schaut der Code jetzt auf dem ersten zweiten und dritten blick richtösch aus?

    Woher sollen wir das wissen?
    Wir haben doch keine Infos über den Code.

    Da kann überall ein Fehler stecken... Oder auch nirgends.
    zB könnte Rounding(time.Get_Time_Difference()) einen negativen Wert liefern, oder elements.resize(size+1); einen Überlauf produzieren oder playerLogfile könnte nicht im Read Modus geöffnet werden.

    Weiterhin kann der Fehler natürlich auch direkt in einen der Funktionen stecken.

    Woher sollen wir das wissen?

    Du musst schon selber Debuggen...



  • Ich gebe zu das ist schwer zu verstehen,
    der string sieht so aus:

    12 7 blafasel

    die differenz ist die zeit zwischen der 7 und der 12, also 5 Sekunden Laufzeit. Jetzt muss ich schauen war schonmal eine nachricht mit 5 s differenz da bzw. ist der vector so groß das ich sagen kann vector[5]++.



  • @shade

    wenn ich aber die vectorgröße einfach mal auf 9999999999 setze klappt ja alles korrekt (wie im startpost beschrieben), d.h. der fehler liegt irgendwo beim vergrößern des vectors!



  • Checkline schrieb:

    der fehler liegt irgendwo beim vergrößern des vectors!

    Irgendwo?
    Na dann ist ja gut...

    Hast du meinen Post nicht gelesen? Eine Erklärung was welche Funktion macht bringt nix. Wenn dein Code korrekt wäre, würde es ja laufen, oder? Folglich hast du einen Fehler. Und da hilft es nichts zu sagen _was_ die Funktion macht, wenn sie fehlerhaft ist.

    Starte deinen Debugger und debugge den Code. Was anderes ist nicht sinnvoll.

    Oder wenn dir das zu kompliziert ist (warum auch immer)
    Dann schreib dir einen wrapper um vector der genau mitloggt was wann und wo getan wird.



  • Mein zweiter Post war quatsch...
    Aber nochmal zur Sicherheit:

    Deine time-Klasse hat nix mit Systemzeit oder so tun, oder?
    Also wenn time.Get_Time_Difference() = x ist, dann
    ist time.Get_Time_Difference() auch nach einer Stunde
    noch = x?



  • Teste doch so mit dem Debugger bis es abstürzt und schau dann warum und wieso, eventuell sind ja manche Funktionen fehlimplementiert:

    Mögliche Datei:

    12 7 text1
    13 11 text2
    14 1 text3
    5 0 text4
    

    Ablauf:

    Vektor [Size: 0]
    
    1. Zeile [Diff: 12-7 = 5]
    
    5 > size TRUE
    size = 5
    Neue Vektorgröße 6
    vektor[5]++ OKAY
    
    2. Zeile [Diff: 13-11 = 2]
    
    2 > size FALSE
    vektor[2]++ OKAY
    
    3. Zeile [Diff: 14-1 = 13]
    
    13 > size TRUE
    Neue Vektorgröße 14
    vektor[13]++ OKAY
    
    4. Zeile [Diff: 5-0 = 5]
    5 > size FALSE
    vektor[5]++ OKAY
    

    MfG SideWinder


Anmelden zum Antworten