Bonjour à tous, c'est encore moi

Dans une fonction, j'ai deux pointeurs qui s'incrémentent dans une boucle. à la fin de la fonction, je libère les zones mémoires correspondantes que j'ai allouées avec malloc. Ensuite, je renvoie l'adresse qui correspond à l'une des zones mémoire. C'est au moment du return que j'ai un message du genre 'violation de l'adresse......'.
voici le code en gros :
float *p1, *p1_i, *p2;
p1 = (float*)malloc(512*512*sizeof(float));
p1_i = p1;
p2 = (float*)malloc(512*512*sizeof(float));
for(....)
{
p1++;
p2++;
}
free(p1);
free(p2);
return(p1_i); //Ici, il s'agit bien de l'adresse qui a été renvoyée à l'origine par malloc.
voilà, si vous avez une idée, je suis preneur. Merci à vous !