Absturz nach ca 1min - C & SDL2 & ANDROID



  • TTF_RenderText_... liefern immer eine NEUE Surface - du gibts nur eine davon (die letzte) frei

    text = TTF_RenderText_Blended(font, digit1, color); hier wird ein char* String erwartet - du gibts einfach einen int rein???

    usw, usw, usw



  • Oh man, da hab ich ja erstmal gut was zu tun 🙂 ... vielen Dank dafür!

    -Also ich werde den Rat beherzigen, das Ganze neu von Begin zusammen zu puzzeln und ausgiebig zu testen.

    -Und natürlich zieh ich mir Datentypen nochmal genauer zu Gemüt.

    -Copileroutput (warnung) wird ab sofort nicht mehr toleriert.

    Auch meine anderen Programme werden da durch müssen 😉 (also wirklich viel zu tun)...

    -----------------------------------------------------------------------

    Meine "alte" schreibweise kommt bestimmt aus dem K&R-Buch, tut mir leid dafür. Wo bekomme ich ein/en Beispiel/Einblik in "aktuellem" Stil?

    Bei dem Textsurface... heuft sich also Müll im ram an, wenn ich es nicht direckt nach der Nutzung sondern erst am Ende nach allen Nutzungen frei mache?

    Und meine Zeile 9... das ich den Datentyp int benutzt habe war so eine art Kettenreaktion. Ich hab es echt erst mit strings probiert, aber das hat (irgendwie (sorry)) nicht funktioniert. Weiss -natürlich- nicht warum. Hab auch noch andere Wege versucht und (für mich) hatte nur dieser so funktioniert. (Wollte also die ints aus den Koordinaten direkt in strings umwandeln (casten?))
    Das heisst, wenn ich mein Programm ausseinander nehme und testend neu zusammen füge, werde ich trozdem dieses Verständnissproblem immernoch haben. Also, wie gehe ich besser mit genau DIESEM Problem/Fehler um?

    Ja ich weiss, erschiessen! Aber das ist mir zu radikal.
    itoa als Funktion brauche ich dabei trotzdem; richtig?



  • -Copileroutput (warnung) wird ab sofort nicht mehr toleriert.

    aber die Warnung bitte nicht Tod/Weg-casten - damit zwingst du nur deinen Kompiler das Problem zu ignorieren - richtig Lösen

    Meine "alte" schreibweise kommt bestimmt aus dem K&R-Buch, tut mir leid dafür. Wo bekomme ich ein/en Beispiel/Einblik in "aktuellem" Stil?

    ein C99 (oder auch älter) Standard-Buch kaufen, im Internet suchen - K&R-Bücher findest du nur noch auf dem Flohmarkt

    Bei dem Textsurface... heuft sich also Müll im ram an, wenn ich es nicht direckt nach der Nutzung sondern erst am Ende nach allen Nutzungen frei mache?

    https://www.libsdl.org/projects/docs/SDL_ttf/SDL_ttf_44.html

    "Returns: a pointer to a new SDL_Surface. NULL is returned on errors."

    da steht nichts von re-use oder sowas - und die Parameter der Funktion reichen so weit ich das sehe nicht aus irgendwas zu re-usen

    https://wiki.libsdl.org/SDL_LoadBMP

    "Returns a pointer to a new SDL_Surface structure or NULL if there was an error;"

    itoa als Funktion brauche ich dabei trotzdem; richtig?

    ja brauchst du (aber bitte die fertige Implementation aus dem Standard) - int wird in "Computer-Art" vorgehalten - du willst aber die menschlich lesbare Form davon - also als Zeichenkette

    http://www.cplusplus.com/reference/cstdlib/itoa/

    und schau dir mal an was im dem Beispiel in Zeile 8 gemacht wird - char buffer [33]; - fester Puffer fuer 32 Zeichen +1 fuer die Abschluss 0

    oder auch mit sprintf

    http://www.cplusplus.com/reference/cstdio/sprintf/

    weitere Tips:

    mach mehr Funktionen:

    text = TTF_RenderText_Solid(font, "LastTP", color);   // Text 
    SDL_Rect rect9 = { 14, 174, 0, 0 };   // Textposition 
    SDL_BlitSurface(text, NULL, windowsurface, &rect9);
    

    koenntest du z.B. in eine put_solid_text(font, text, color, left, top) Funktion
    umbauen und dann x mal nutzen - würde deinen Code sehr viel kleiner machen

    immer initialisieren:
    und auf jeden Fall jede Variable sofort initalisieren - und wenn du Free oder sonstige Handle/Pointer-Freigaben verwendest sofort danach deine Variable auf 0 setzen (oder passenden Initalwert) - auch wenn du sie dann nicht mehr nutzt - sicher ist sicher

    es gibt da auch nette Tools die unterstützen wie z.B.

    AddressSanitizer (und andere Sanitizer) von clang oder gcc
    http://cppcheck.sourceforge.net/
    http://www.viva64.com/en/pvs-studio/
    http://valgrind.org/

    aber jetzt erstmal die Dokus richtig lesen dann klappt das schon



  • Also ich bin sehr zufrieden mit der Hilfe, die ich hier bekommen habe. Nochmals danke!

    Ich weiss was ich jetzt zu tun hab 🙂

    Ein Analysetool suche ich schon sehr lange für ein Android sys auf arm-basis.
    Hoffe ich bekomme valgrind zum laufen.

    Wenn ich entsprechende Fortschritte verzeichne oder ich an neue Grenzen stosse werde ich den neuen Code hier posten...

    thx

    cy

    ;



  • Gast3 schrieb:

    itoa als Funktion brauche ich dabei trotzdem; richtig?

    ja brauchst du (aber bitte die fertige Implementation aus dem Standard) - int wird in "Computer-Art" vorgehalten - du willst aber die menschlich lesbare Form davon - also als Zeichenkette

    http://www.cplusplus.com/reference/cstdlib/itoa/

    itoa ist eben nicht im Standard!

    /www.cplusplus.com/reference/cstdlib/itoa schrieb:

    Portability
    This function is not defined in ANSI-C and is not part of C++, but is supported by some compilers.

    Und es gibt auch Impementationen, wo die Basis nicht mit angegeben wird.



  • itoa ist eben nicht im Standard!

    du hast ja recht - dann eben "nutze die itoa-Funktion die dir am nächsten ist" oder einfach sprintf


Anmelden zum Antworten