Yes, line 7 is ncessary because the data type _USERIN_LIST* accepts null values (null pointers). If the current item is a null pointer, line 9 would crash and burn.
Line 16 is a mistake because Iter is not a pointer type and you didn't allocate it with operator new. NEVER delete what you didn't new'ed.
It is safe as long as you ALWAYS enter that critical section EVERY TIME you access the list m_UserList for ANYTHING.
So now you want to erase null pointers from the collection. Is that it? Anyway, if you do that, the iterator will invalidate. If you do that, you MUST exit the for() loop immediately after the erase operation.