aqui os pongo el codigo de la funcion que recibe dos de los vectores y los suma en un tercero.
void sumar(int *m1,int *m2,int fm1,int cm1)
{
int *m3,i,j,X;
m3=(int*)malloc(fm1*cm1*sizeof(int));
for (i=0;i<fm1;i++)
{
for (j=0;j<cm1;j++)
{
X=*(m1+(i*fm1+j)*sizeof(int))+*(m2+(i*fm1+j)*sizeof(int));
*(m3+(i*fm1+j)*sizeof(int))=X;
}
}
for (i=0;i<fm1;i++)
{
for (j=0;j<cm1;j++)
{
printf ("%d ",*(m3+(i*fm1+j)*sizeof(int)));
}
printf ("\n");
}
este vector m3 es el que parece que comparte un trozo de memoria con m1, ya que si les digo que imprimar todas sus posiciones el 1 y el 3 tienen 4 iguales.