I agree that dynamic memory allocation should be used only when it's needed, but...
Quote: "Only use new/delete where you really need to. (Chances are you'll never need this.)"
Chances are you'll need it all the time. There are many situations when you just don't know in advance how many objects of a class, or even how much memory for other types of data, your program will need. (The easiest example here is a game level editor, how do you know how many objects the user will create?) Dynamic allocation does have its place in programming and it is not bad in itself, if it is implemented carefully.
Quote: "non-dynamic memory management is always better"
Not necessarily. It depends on the task to be solved. Also, static and dynamic allocation use different memory areas of the computer and with lots of data the static area can fill up. See:
http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/
The examples that you gave are trying to instantiate a class within the class itself. I'd say you should never need to do it like this (in either form), unless you are trying to implement a singleton pattern and that needs a pointer too. The non-pointer version above will not even compile, it will give an error message ("myClass uses myClass which is being defined").
Anyway, we are completely off-topic here because all this discussion about memory allocation will not solve your problem. Since there is a month between your two posts, I suppose you solved the issue in the meantime and it was a bad pointer, or a pointer dereferenced before the object was created?
If the problem still exists, it would be good to post the code, then you have better chance of getting help. I'm sorry that you did not receive assistance the first time you posted but I wouldn't know either what the problem is without doing some serious debugging on the code. Unfortunately access violations are not easy to debug.