// pの場所をメモリ番地 0x123 と仮定して考えてみよう
int* p;    // メモリ番地 0x123 の値は不定
p = &p    // メモリ番地 0x123 の値は 0x123

*p      // "メモリ番地 0x123 に書いてあるメモリ番地 0x123" の内容を読んだり書いたりする命令
*p = 3    // この場合は、メモリ番地 0x123 に書いてあるメモリ番地 0x123 の場所に、数字の 3 を記録する

// この時点で、 メモリ番地 0x123 に書いてある数字は 0x123 ではなく 3 になっている。

//次に、*p として参照すると
*p      // これはメモリ番地0x123 に書いてあるメモリ番地 3 を参照する命令となる。
       // もちろんメモリ番地 3 には、まだ何もデータを書き込んでない。(それどころか、そこが使えるかどうかも不明)

だから何らかのメモリエラーが予想されますし、案の定、エラーでで止まりませんか?