P
leo aka qsch schrieb:
tritt der Fehler bei der ersten Ausfuehrung auf oder erst spaeter?
Das Problem ist ja schon gelöst, Erklärung zur Nachreiche:
Ich habe zwei "Watches" in der TouchWatchList angelegt, beim zweiten aber den von Realloc gelieferten Pointer nicht übernommen und damit verpaßt, daß TouchWatchList auf einen nunmehr freien Bereich verweist (falsch!!). Beim Anlegen des ersten Events kriege ich den ersten freien Speicher - und der liegt genau dort, wo vorher die TouchWatchList lag (ist aber keine allgemeingültige Weisheit, könnte je nach Compiler/OS auch irgendwo anders liegen).
So, lustigerweise hat man überhaupt keine Probleme, wenn man TouchList und EventList separat durchtestet (aber vermutlich auch nur mit genau diesem Compiler), und weil man einen Fehler, den man nicht erkennt, gerne durch Copy&Paste vermehrt, fällt man zu spät auf die Schnauze und schaut sich vermeintlich richtige Dinge nicht mehr an.
Richtigerweise hätte es heißen müssen:
if (touchentries) TouchWatchList = realloc(TouchWatchList, ++touchentries * sizeof(struct TouchWatch*));
else TouchWatchList = malloc( ++touchentries * sizeof(struct TouchWatch*));
und natürlich auch:
if (events) EventList = realloc(EventList, ++events * sizeof(struct event*));
else EventList = malloc( ++events * sizeof(struct event*));
Alle Klarheiten beseitigt?