2011-07-31 121 views
1

有没有malloc失败的情况,而calloc返回成功。假设我给malloc(20)calloc(4*5),是否存在malloc可能失败和calloc成功的任何情况。如果是这样的确切原因是什么。malloc失败时calloc返回成功

+0

不是我能想到的。这是真的发生了吗? –

+0

@Marcelo。是的,有一种情况。但是我找不到原因 –

+0

我只能想到相反的结果:由于_overcommitting_('man 3 malloc' _BUGS_ section),'malloc()'成功并且'calloc()'因当前程序的SIGKILL失败在OOM中杀死该程序。 – Shi

回答

0

我能想到malloc()失败和calloc()成功的唯一原因是某个库(或您的应用程序)覆盖了一个而不是另一个。

当然,任何libc发生这种情况是打破。

+0

这是可能的。我不确定。在malloc(20)期间,系统找不到20个连续的字节,因此失败。但calloc(4 * 5)可以找到4个5个字节的位置,所以calloc成功? –

+0

calloc(4,5)不分配4个独立的内存块;它只有一个返回值,并且返回的指针指向一个缓冲区,该缓冲区可以容纳4个每个5字节的元素,即包含至少20个字节的单个连续缓冲区。 –