Damn. It just goes to show, when writing new and shorter code in the post, instead of doing a cut-n-paste from the real code, one introduces new errors. And there is one more error in my initial post. I was just gettng very very frustrated. Sorry. If you look at the real code (link in above post), you'll see that I do know the difference.
Still the problem is there.
When I write
static int P ;
F ( &P ) ;
:
void function F ( int *P) { *P = 42 ; }
it works fine
BUT when I use
/*dynamic*/ int P ;
F ( &P ) ;
:
void function F ( int *P) { *P = 42 ; }
I get "random" results