相关疑难解决方法(0)

我可以假设用较小的大小调用realloc可以释放余数吗?

让我们考虑一下这段很短的代码片段:

#include <stdlib.h>

int main()
{
    char* a = malloc(20000);
    char* b = realloc(a, 5);

    free(b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在阅读了realloc的手册页后,我不完全确定第二行会导致释放19995个额外字节.引用手册页:The realloc() function changes the size of the memory block pointed to by ptr to size bytes.但是根据该定义,我可以确定其余的将被释放吗?

我的意思是,指向的块b肯定包含5个空闲字节,所以对于懒惰的顺从分配器是否足以让realloc行不做任何事情?

注意:我使用的分配器似乎释放了19 995个额外字节,如valgrind在注释掉free(b)行时所示:

==4457== HEAP SUMMARY:
==4457==     in use at exit: 5 bytes in 1 blocks
==4457==   total heap usage: 2 allocs, 1 frees, 20,005 bytes allocated
Run Code Online (Sandbox Code Playgroud)

c malloc free realloc

26
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×1

free ×1

malloc ×1

realloc ×1