C Programm terminiert nicht, jedoch nur bei grossen Datenmengen

  • Moin



    Habe ein kleines Programm geschrieben um solche Zeilen: CreateDynamicObject(3361,3487.77929688,3228.35913086,189.82043457,0.00000000,0.00000000,183.98803711); // object(cxref_woodstair) (168)
    In folgendes Format umzuwandeln <object id="object (Konvert)(0)" breakable="true" interior="0" collisions="true" alpha="255" model="3361" doublesided="false" scale="1" dimension="0" posX="3487.779" posY="3228.359" posZ="189.8204" rotX="0" rotY="0" rotZ="183.988"></object>



    und umgekehrt.



    Jedoch habe ich das Problem, wenn ich Daten so umwandle funktioniert das ganze problemlos, aber wenn ich grosse Mengen an Daten nehme, das heisst mehr als 21000 Zeilen terminiert das Programm nicht.



    Woran kann das liegen?



    Hier mal mein gesamter Quellcode




    bzw. der Block bei Zeile 78 und 104 auf Pastebin http://pastebin.com/LAMxv5hi



    Der Block bei Zeile 130, also das ueberfuehren von dem XML Format mit <object> etc. in CreateObject wie oben angegeben funktioniert problemlos, auch mit grossen Dateien, nur der andere Weg, CreateObject in XML fuehrt zu Fehlern, da wie gesagt das Programm nicht terminiert.



    Irgendwann bricht in der Output Datei, immer ab Zeile 20264 der Output so ab:
    <object id="object (Konvert)(20263)" breakable="true" interior="0" collisions="true obwohl es weitergehen sollte.

  • Ich hab gesehen das du nirgends einen FFlush machst.
    Vielleicht läuft einfach dein Buffer oder Memory voll und somit kann es nicht mehr weiterschreiben.

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Wenn der buffer aber bereits vorher schon überläuft bzw kein Memory mehr frei ist kommst du niemals zum fclose.
    Schaden kann es sowieso nicht nach jeder iteration im loop, den Buffer in das File zu schreiben.

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Dafür ist fflush nicht da.

    fflush schreibt den Buffer in das darunterliegende File. (oder auch Terminal etc.)
    Für was soll dieses sonst da sein? Dann hätte man ja direkt keine Buffer implementieren können und immer direkt ins File schreiben.


    Zum Thema:
    Check den Rückgabe Wert von fscanf. Wenn dieser 0 ist stimmt schon etwas mit der input Line nicht. (Zudem solltest du Allgemein mehr Error Checking machen...)

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • @toor Nein, du willst ja den Buffer leeren, damit es nicht zu einem Overflow kommt. Das ist aber nicht der Sinn der Funktion.


    "fflush() wird dazu verwendet, den Puffer eines Streams in den Stream zu sichern.
    Streams werden in der Regel zwischengepuffert, um möglichst viele Daten am Stück zu übertragen, statt Buchstabe für Buchstabe zu übertragen. Daher wird mit der Übertragung oftmals gewartet, bis ein Block voll oder eine Zeile abgeschlossen ist. Damit kann eine sofortige Ausgabe erzwungen werden, zum Beispiel, um eine Ausgabe auf dem Bildschirm zu erlangen, obwohl die Zeile nicht mit einem Newline-Zeichen abgeschlossen wurde."


    @Sub Royal Du könntest ja mal deine kompilierte Anwendung irgendwo hochladen, zum Testen.