BLACKDIAMONT
Lt. Commander
- Registriert
- Nov. 2012
- Beiträge
- 1.475
Moinsen,
Haben wir bei CB ein paar C Gurus? Hintergrund ist folgender:
ich hatte vor einigen Jahren mal mit C angefangen, hatte damals aber schon probleme mit malloc und es beseite geschoben.
Jetzt habe ich das ganze mal wieder angefangen und mein matrix-bot-script von PHP in C gebastelt.
Es funktioniert solang einmal das Script läuft ... allerdings sobald es im loop läuft gibt es div malloc fehler ..
oder
sind das Hauptproblem und treibt mich zur Verzweifelung
Ohne jetzt hunderte Codezeilen hier zu Posten ... ein Beispiel:
Das realloc wird angemeckert .. das hatte ich erst als malloc, aber das wirft nach dem zweiten loop "corrupted size ..."
Mit realloc eben das invalid sitze (unsorted) ...
Allerdings tritt das nicht jedesmal auf
Google quäle ich ständig ... #pragma war ein Vorschlag was irgendwie gar nix bringt (evtl mach ichs falsch).
Den Vorschlag mit "nimm doch C++" is für mich nicht die Lösung^^
Debug flags sind aktiv für gcc und ich nutze GDB so wie valgrind, was mir wenig hilft aktuell ...
Hab mir schon einige Tutorials zu malloc und realloc angeschaut, aber so wirklich helfen tut das alles nich :/
Wer kann mich vor der totalen Verzweiflung bewaren?
Haben wir bei CB ein paar C Gurus? Hintergrund ist folgender:
ich hatte vor einigen Jahren mal mit C angefangen, hatte damals aber schon probleme mit malloc und es beseite geschoben.
Jetzt habe ich das ganze mal wieder angefangen und mein matrix-bot-script von PHP in C gebastelt.
Es funktioniert solang einmal das Script läuft ... allerdings sobald es im loop läuft gibt es div malloc fehler ..
malloc(): invalid size (unsorted)
oder
corrupted size vs. prev_size
sind das Hauptproblem und treibt mich zur Verzweifelung

Ohne jetzt hunderte Codezeilen hier zu Posten ... ein Beispiel:
C:
void blubb(void) {
char *retdata = malloc(1);
size_t nbsize;
while(true) {
nbsize = snprintf(NULL, 0, "sync?timeout=30000&since=%s&filter=1&", next_batch);
tmp = realloc(tmp, nbsize+1);
sprintf(tmp, "sync?timeout=30000&since=%s&filter=1&", next_batch);
retdata = getdata(tmp, botid);
}
}
Das realloc wird angemeckert .. das hatte ich erst als malloc, aber das wirft nach dem zweiten loop "corrupted size ..."
Mit realloc eben das invalid sitze (unsorted) ...

Allerdings tritt das nicht jedesmal auf

Google quäle ich ständig ... #pragma war ein Vorschlag was irgendwie gar nix bringt (evtl mach ichs falsch).
Den Vorschlag mit "nimm doch C++" is für mich nicht die Lösung^^
Debug flags sind aktiv für gcc und ich nutze GDB so wie valgrind, was mir wenig hilft aktuell ...
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1 0x00007ffff7c70537 in __GI_abort () at abort.c:79
#2 0x00007ffff7cc9768 in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7ffff7de73a5 "%s\n") at ../sysdeps/posix/libc_fatal.c:155
#3 0x00007ffff7cd0a5a in malloc_printerr (str=str@entry=0x7ffff7de9b70 "malloc(): invalid size (unsorted)") at malloc.c:5347
#4 0x00007ffff7cd3b3c in _int_malloc (av=av@entry=0x7ffff7e1db80 <main_arena>, bytes=bytes@entry=241) at malloc.c:3736
#5 0x00007ffff7cd486e in _int_realloc (av=av@entry=0x7ffff7e1db80 <main_arena>, oldp=oldp@entry=0x55555555d9c0, oldsize=oldsize@entry=32, nb=256) at malloc.c:4600
#6 0x00007ffff7cd5c56 in __GI___libc_realloc (oldmem=0x55555555d9d0, bytes=238) at malloc.c:3235
#7 0x000055555555882c in start_bot (botid=0) at bot.c:318
#8 0x00005555555570a2 in main (argc=1, argv=0x7fffffffe0a8) at main.c:267
Hab mir schon einige Tutorials zu malloc und realloc angeschaut, aber so wirklich helfen tut das alles nich :/
Wer kann mich vor der totalen Verzweiflung bewaren?

Zuletzt bearbeitet: