Bugia
prima del ciclo while (ultimo) manca l'allocazione della memoria necessaria, almeno spero:

p = GlobalAlloc(GPTR, i);