#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崩溃的原因,但是我不确定如何解决此问题...

最佳答案

您正在使用相同的变量。因此,您的第一个分配被泄漏。

VirtualFree释放它之后,指针无效。因此,delete尚未定义。

此外:

出于无法将VirtualAllocdelete混合的相同原因,不能混合mallocdelete

10-06 14:24