unsigned char* pFoo = new unsigned char[1000];
Теперь pFoo
содержит указатель на динамическую память.
pFoo = (unsigned char*)VirtualAlloc(NULL, 1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
Перезаписывает старый указатель, массив 1000 char
пропускается.
Попробуйте:
unsigned char* pFoo = new unsigned char[1000];
unsigned char* pBar = (unsigned char*)VirtualAlloc(NULL, 1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
VirtualFree(pBar, 0, MEM_RELEASE);
delete[] pFoo;