>>435
ifで複数の条件を書いたときに、その評価順序は常に最初からとは限らなかったはず。
つまり、 p != NULLが最初に評価されればその場で偽となるが、p->m > 0 から評価されることがあり、
そのときp = NULLであったなら、NULLなポインタpに対して参照しているためエラーが発生する可能性があるのかと言いたいのでは?

なのでこの場合の対処コードは
if(NULL != p) {
if(p->m > 0) {
/* 処理 */
}
}
でよろしくない?