Operator Precedence heisst das Zauberwort.
Einfach den Code mal im Single Step laufen lassen, dann sieht mans. Schon bei " *x=*x+1; " kann man Bedenken haben: heißt das *x = *(x + 1) oder *x = (*x) + 1. Das geht aber noch gut. Aber bei *x++ gehts schief. Hier wird x um eins erhöht, dann derefferenziert und das Ergebniss ignoriert. Es müsste also heißen (*x)++. Für den Compiler mit seinen precedence Regeln steht dort aber *(x++). Jetzt zeigt x irgendwohin und die letzte Zeile inkrementiert diese Speicherstelle. Steht dort eine andere Variable, ist sie zerstört. Eine klassische Pointerfalle.
MfG Klebwax
P.S. Auf Anhieb hab ich das nur geahnt, der Debugger hat es mir aber gezeigt.
Lesezeichen