c - Freed memory not causing page fault -


in experimenting reserving , committing virtual memory process, allocated 64k bytes of memory virtualalloc, memcpy'd test string it, printf'd string, freed memory virtualfree mem_release flag, , printf'd again. reason, no page fault triggered. why this?

#include <stdio.h> #include <windows.h>  int main(dword argc, lpstr argv[]) {     system_info info;     dword dwpagesize;     dword dwmemsize;     lpvoid lpvmem;      getsysteminfo(&info);     dwpagesize = info.dwpagesize;     dwmemsize = 16 * dwpagesize;      lpvmem = virtualalloc((lpvoid) 0x00f00000, dwmemsize, mem_commit | mem_reserve, page_readwrite);     if (!lpvmem) {         printf("error allocating virtual memory\n");         return 1;     }      printf("lpvmem = 0x%08x\n", (uint32) (uint64) lpvmem);      if (!memcpy(lpvmem, "i love foxes \\(^o^)/", 21)) {         printf("error copying memory (error code 0x%08x)\n", getlasterror());         return 1;     }      printf("before free: %s\n", (lpcstr) lpvmem);     virtualfree(lpvmem, dwmemsize, mem_release);     printf("after free:  %s\n", (lpcstr) lpvmem);      fflush(stdout);      return 0; } 

output:

lpvpagedmemory = 0x00f00000 before free: love foxes \(^o^)/ after free:  love foxes \(^o^)/ 

this line:

virtualfree(lpvmem, dwmemsize, mem_release); 

is error. not checking virtualfree() returns, , documentation says:

dwsize [in]
...
if dwfreetype parameter mem_release, this parameter must 0 (zero). function frees entire region reserved in initial allocation call virtualalloc.

so need use instead:

virtualfree(lpvmem, 0, mem_release); 

about page fault - can (and must) happen after successful call virtualfree().


Comments

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -