Il faut faire free(szv-3); comme tu l'as dit en premier lieux. Un conseil si tu dois décaler ton pointeur de la sorte : créé un second pointeur pointant vers la même zone mémoire mais que tu ne modifiera pas, comme ça tu garde dans un coin l'addresse à passer à free :
char *szv = (char *)malloc(200*sizeof(char));
char *plop = szv;
szv += 3; /* toutes les modifs que tu veux */
free(plop);