First of all: if you take sizeof(src)
you will alloc memory for a pointer, not for a string. In 32 bit environments, this will leave you with 4 bytes of memory, and not 10 as you need.
Therefore, you need to supply how much memory do you need, or infere it from your second argument: something like this:
void str_cpy(char** dest, const char* src){
if (*dest == NULL) *dest = malloc(strlen(src)+1);
else *dest = realloc(*dest, strlen(src)+1);
memcpy(*dest, src, strlen(src) + 1);
}