C0000005 indicates an access vialoation. Usually it means you are trying to access invalid memory, either by dereferencing a pointer not pointing to valid memory, or by using a pointer to reach past the bounds of the memory it points to.
In your case, it looks like you're somehow invoking the constructor
C::C()
in an inappropriate way, i. e. on an invalid memory address. This is only possible if you directly call the constructor on an invalidated object, or on a pointer that was never instantiated with an object. The bug is in the code that calls the constructor!
P.S.:
Here are a few examples that may cause error C0000005:
1. wrong way to construct an object
void construct_fail()
{
C* pc; pc->C(); }
2. trying to "reinitialize" a destroyed object
void reinitialize_fail(C* pc)
{
pc->C(); }
3. Trying to construct an object in-place on an invalid memory pointer
C* make_C(void* my_memory_block)
{
return new (my_memory_block) C; }
...
void* memblock; C* pc = make_C(mem);