我试图释放数据的某些部分,并用特定的整数值标记其休息,以表明它不是有效的指针.(不是数组)

I am trying to free some part of data and mark its rest with specific integer value to indicate that it is not a valid pointer. (Not an array)

本文关键字:有效 数组 指针 些部 数据 释放 整数      更新时间:2023-10-16
bool isPointerValid(void *vd)
{
    if (*(int*)vd == 22049929)
    {
        return false;
    }
    return true;
}
void operator delete(void *vd)
{
    if (!isPointerValid(vd))
    {
        //DOUBLE DELETION
        throw;
    }
    realloc(vd, 4);
    *((int*)vd) = 22049929;
}

我正在重新分配数据,而不是完全释放它们。并将特定的整数值写入该重新分配的数据。这样,我可以检查一个指针,该指针在查看其前4个字节时被删除或不删除。

我正在做减小尺寸的操作以节省内存。

但是这里有两个不同的问题:

1- REALLOC功能并不是要在重新分配后要具有相同位置的情况。即使在该位置有足够的空间可容纳4个字节。我们知道我们的初始数据是否大于4个字节,必须有足够的空间。

2-某些数据类型可能小于4个字节。在该位置的内存中,内存中的4个字节不足。当您将这些小数据类型存储在容器中时,它经常发生。我们可以通过将每个数据类型重新定位到1个字节来解决,但是将一个字节数据与有效的指针的第一个字节匹配的可能性太大。

最好的前哨值是(void*) nullptr。发明自己的哨兵正在问问题。