当试图释放由堆管理器分配的内存时会发生什么,它分配的内容超过了要求?

Roz*_*uur 8 c c++ heap malloc free

我在接受采访时问了这个问题.

假设char*p = malloc(n)分配多于n,比如分配N个字节的内存,free(p)用于释放分配给p的内存.

堆管理器可以执行这样的错误分配吗?现在发生了什么,将释放n个字节或释放N个字节?

有什么方法可以找到释放多少内存?

编辑

有什么方法可以找到释放多少内存?

有总比没有好,

mallinfo()可以像"Fred Larson"所指出的那样轻松一些

Car*_*rum 8

是的,几乎每次都会发生这种情况malloc().该malloc块标题包含有关块的大小的信息,并且当free()被调用时,它返回量返回到堆.它没有错,它是预期的操作.

例如,一个简单的实现可能只是在返回指针之前的空间中存储块的大小.然后,free()看起来像这样:

void free(void *ptr)
{
    size_t *size = (size_t *)ptr - 1;

    return_to_heap(ptr, *size);
}
Run Code Online (Sandbox Code Playgroud)

这里return_to_heap()使用的术语是指执行将指定的内存块返回堆以供将来使用的实际工作的函数.