为什么Realloc(null,size)打电话给我的Malloc包装器,但是Realloc(PTR,0)不称呼我的免费包装器? 我已经包裹了我的动态内存功能(Malloc,Calloc,realloc和Free),以跟踪程序中的内存使用量。 我遇到以下内容: 呼叫realloc(null,5)直接进入我的M ...

问题描述 投票:0回答:1

,即使释放了内存(通过释放了内存,请确认我的指针,然后通过显式呼叫Free()是双重免费)

我对此的问题是:

  • 为什么Realloc(null,大小)调用我的Malloc包装器,而Realloc(PTR,0)不会明确调用我的免费包装器?
  • 如何包装/跟踪Realloc为免费内存做什么,或者如何使Realloc使用免费使用()?
我感谢任何帮助。

Tldr I包裹了Malloc,Free和Realloc以跟踪内存。我希望Realloc(PTR,0)致电我的免费包装纸,但事实并非如此。相反,记忆被默默释放。 Realloc(Null,大小)正确地转到了Malloc包装器。我试图理解为什么存在这种差异。

  1. 为什么
  2. realloc(NULL, size)
调用我的malloc包装器,而realloc(ptr,0)不会明确调用我的免费包装器?

因为标准是这样的。

第7.22.3.5章,第3段:

如果是一个无效的指针,
c memory-management dynamic-memory-allocation glibc realloc
1个回答
0
投票
函数的行为就像指定大小的malloc函数。

解释了为什么第一个参数为realloc

和第4段:

malloc()

函数返回指向新对象的指针(可能与旧对象的指针具有相同的值),或者如果无法分配新对象,则null指针。

因此,并不是要求在传递有效的指针时,Realloc必须释放分配给上一个地址(指针)的内存,并在不同地址分配新的内存块,它可以简单地重新尺寸(即,更新更新相关的元数据,可容纳分配的内存大小)根据对REALLOC的最新调用的内存分配 - 因此不保证基础
NULL

呼叫。

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.