El problema creo que es porque el compilador no sabe el tamaño del dato. Es decir, si tu itenes un char*, el compilador sabe que el tamaño de dato es 1 octeto ( sizeof (char)). Si tienes int* entonces el tamaño será 2 octetos o 4 octetos (dependiendo de la configuración y del SO), es decir "sizeof (int)". Con void* no lo sabe porque los datos "void" tienen un tamaño de 0 octetos.
Así, "pPathSave + 4" se traduce por
Código:
(void*) (((long int)pPathSave) + (4 * sizeof (void)))
Es decir:
Código:
(void*) (((long int)pPathSave) + (4 * 0))
Y 4 * 0 = 0, de ahí que no sume nada.
La única solución que se me ocurre es no usar void*, sino un puntero al tipo de dato apropiado (deduzco que en tu caso sería int*).
Por cierto, "&pPathSave" devuelve la dirección donde se almacena el puntero, no el valor del puntero.