#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而崩溃,但我不知道如何解决这个问题......
答案 0 :(得分:1)
你正在使用相同的变量。所以你的第一次分配就会泄露。
使用VirtualFree
释放后,指针无效。因此,delete
未定义。
此外:
您不能混用VirtualAlloc
和delete
,原因与malloc
与delete
混合的原因相同。
答案 1 :(得分:1)
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;
答案 2 :(得分:1)
使用new / delete或VirtualAlloc / VirtualFree。你正在分配两个独立的内存块,使用pFoo来引用它们(当然它一次只能引用一个)然后用pFoo调用两个自由函数。其中一个将失败:)