In the call
_CrtIsValidHeapPointer((const void*)&c1))
, you're not using the passed pointer in the call, but instead the address of the temporary stack variable, passed to your function.
Note that in release mode _CrtIsValidHeapPointer is stubbed out. It only works in debug.