Richard is correct. In general, in C++ you should use new and delete but even better is to use STL objects. A std::vector<puchar> would likely work for you.
In the rare instances I have use calloc and free I use this little macro :
#define AllocateMemory(count,type) (type*)calloc(count,sizeof(type))
PUCHAR * m_buffer = AllocateMemory( 50, PUCHAR );
No casting is necessary because it is done in the macro.
Do you really want 50 pointers or do you want an array of 50 bytes? It is not clear from your question because it mixes them. The example shows how to get 50 pointers. Using the macro, here is how to get 50 bytes :
UCHAR * m_buffer = AllocateMemory( 50, UCHAR );