如何检查指针在 C++ 中是否有效?

How to check if a pointer is valid in C++?

面试题是写内存管理器(内存池)。我快完成了,但是我在解除分配方面遇到了问题。寻求帮助也是可以的,只要我们提到帮助的来源。所以请帮助我

int main(void)
{
  using namespace PoolOfMemory;

  initializePoolOfMemory(); // Initialize a char array as the memory pool

  long* int_pointer;

  int_pointer = (long *) allocate(sizeof(long)); //allocate is defined in PoolOfMemory and it returns void*.

  int_pointer = 0xDEADBEEF;

  deallocate(int_pointer);
}

现在我的问题是,当 "deallocate" 试图解除分配 int_pointer 时,它会引发访问冲突错误,显然是因为我正在尝试访问 0xDEADBEEF。下面是我的简单解除分配函数:

void deallocate(void* p)
{
    Header* start = (Header*)((char*)p-sizeof(Header));
    start->free=true; //This is where I get access violation.;
}

我怎样才能避免这种情况?根据我在网上阅读的内容,我假设检查 p 是否在我的数组中是行不通的。

内存管理器往往更接近硬件级别,可能需要根据操作系统和CPU使用它们的类型做出决定。

在这种情况下,您可以证明打破某些 C++ 抽象机规则是正当的。例如,继续将指针与池数组的边界进行比较。是的,这在使用分段内存或可以形成陷阱指针的体系结构上可能会出错,但您还打算做什么?

之后,为了验证您是否有一个正确的指针,您可以让您的分配器将一个魔法值写入分配头块,您可以在开始写入空闲布尔值和空闲块指针之前在 deallocate 函数中验证该值等