,即使释放了内存(通过释放了内存,请确认我的指针,然后通过显式呼叫Free()是双重免费)
我对此的问题是:
Tldr I包裹了Malloc,Free和Realloc以跟踪内存。我希望Realloc(PTR,0)致电我的免费包装纸,但事实并非如此。相反,记忆被默默释放。 Realloc(Null,大小)正确地转到了Malloc包装器。我试图理解为什么存在这种差异。
realloc(NULL, size)
因为标准是这样的。
第7.22.3.5章,第3段:
如果是一个无效的指针,
解释了为什么第一个参数为
realloc
。和第4段:
malloc()
因此,并不是要求在传递有效的指针时,Realloc必须释放分配给上一个地址(指针)的内存,并在不同地址分配新的内存块,它可以简单地重新尺寸(即,更新更新相关的元数据,可容纳分配的内存大小)根据对REALLOC的最新调用的内存分配 - 因此不保证基础
NULL
呼叫。