NULL-Terminated while-loop erzeugt Stack Overflow

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NULL-Terminated while-loop erzeugt Stack Overflow

    Guten Tag,

    ich habe einen loop, in dem ich den Buffer des Eingangsstreams meines Clients auslese.
    Da GameMaker Studio mit schnell hintereinander gesendeten Messages nicht klarkommt (Habe einen Java Server am anderen Ende) habe ich mich dazu entschieden, alles in einen Buffer zu schreiben und dann am Ende zu flushen.
    (Die Alternative wäre hier jeden Informationsblock als eigene Message zu schicken, aber das drückt GameMaker wie gesagt absolut nicht...)

    Selbst die Strings, die ich vom server krieg, muss ich manuell char für char auslesen und zusammenklopfen, dasselbe umgekehrt.
    Das gleiche gilt für alles was größer als ein Byte ist, da Java high byte first sendet, und GameMaker anscheinend low byte first.

    Jetzt habe ich natürlich einen massiven haufen an bytes, die gelesen werden müssen.
    Es handelt sich um durchschnittlich 3.500 Bytes, die ich so in einer while schleife am client manuell auslese.

    Beispiel, stark vereinfacht:

    GML-Quellcode

    1. nID = readByte();
    2. while (nID != 0) {
    3. ds_list_add(list, readStringFromBuffer());
    4. nID = readByte();
    5. }


    Was hier aber interessant ist:
    Die Information kommt komplett und völlig fehlerfrei an.

    Die exakte Fehlermeldung:

    GML-Quellcode

    1. ---------------------------
    2. Stack overflow Error
    3. ---------------------------
    4. gml_Script_readByte
    5. ---------------------------
    6. OK
    7. ---------------------------


    Wenn hier jemand eine Lösung hat, widme ich ihm mein nächstes Lied. Ehrlich.
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Möglicherweise ein unbeabsichtigter loop in den Scripts? (Rekursion)

    Ein Stackoverflow passiert ja meistens nur wenn man zu viele Funktionen im Stack liegen hat die noch nicht returned haben.
    Aber evtl könnte das auch irgendwie intern an den Buffern von GameMaker liegen...

    Edit:
    Was auch sein könnte, erstellst du evtl. viele temporäre Daten Strukturen in deinen Scripts?
    :saint:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Tice ()

  • Hab den Fehler nach langem Testing gefunden - war ein paar steps nach dem loop ein Short welcher als Byte abgefangen wurde. Trotzdem seltsam dass dies einen Stack Overflow erzeugt.

    Trotzdem vielen Dank für Deine angebotene Hilfe Tice!
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)