Using sizeof as the size argument will only work for arrays. For dynamically allocated memory you need to give the same size argument as you gave to new:
Code:
char *p;
...
p = new char[strlen ( SOME_STRING ) + 1];
memset ( p, 0, strlen ( SOME_STRING ) + 1 );
Your current code only takes the sizeof a pointer, which would be something small like 4.
>Should one memset the additional element used for the null or not?
It depends on the value you set the other elements to. If it's 0 then it couldn't hurt. If it's not 0 then there's no real point because you'll have to set it to 0 separately. However, memset for strings isn't really needed as you can allocate the memory and make the string empty by setting the first character to '\0':
Code:
char *p;
...
p = new char[strlen ( SOME_STRING ) + 1];
*p = '\0;
The effect is the same as long as you treat p as the start of the string when you begin to work with it.