Si tu écrit dans un pointeur non-initialisé tu écris n'importe où en mémoire, et tu obtiens un comportement indéfini :
- Si tu as de la chance ca plante (ce qui t'oblige à rechercher l'origine du bug).
- Si tu n'as pas de chance le programme semble se dérouler correctement, mais le bug peut ressurgir n'importe quand (et lorsque le bug ressurgit des mois plus tard lorsqu'on modifie une toute autre partie du programme c'est vraiment affreux à débugger...)
Le simple fait de modifier une ligne de ton programme, ou même de le recompiler avec un compilateur différent peut faire resurgir le bug. La présence du
printf() masquait le bug justement à cause de ce comportement indéfini... mais
printf() n'était nullement en cause ;)
a++