#include <Windows.h>
#include <iostream>
using namespace std;
int main(void)
{
unsigned char* pFoo = new unsigned char[1000];
pFoo = (unsigned char*)VirtualAlloc(NULL, 1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
VirtualFree(pFoo, 0, MEM_RELEASE);
delete[] pFoo;
cin.ignore();
cin.get();
return 0;
}这对我来说是崩溃的
delete[] pFoo;我知道这是因为VirtualAlloc崩溃,但我不确定如何解决这个问题…
发布于 2011-10-10 10:02:49
您使用的是相同的变量。所以你的第一次分配就会泄露。
在您使用VirtualFree释放它之后,指针就无效了。所以它上的delete是未定义的。
此外:
你不能把VirtualAlloc和delete混用,就像你不能把malloc和delete混在一起一样。
发布于 2011-10-10 10:05:26
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;发布于 2011-10-10 10:05:56
使用new/delete或VirtualAlloc/VirtualFree。您将分配两个独立的内存块,使用pFoo引用这两个内存块(当然,它一次只能引用一个),然后使用pFoo调用这两个空闲函数。其中一个将会失败:)
https://stackoverflow.com/questions/7707876
复制相似问题