我在我的bsm_create函数中的各个地方调用了malloc函数,但在某些地方我有相同的内存地址。 malloc / calloc函数可以释放一些位置,并再次在linux(fedora)环境中分配该位置。
答案 0 :(得分:4)
当先前分配了malloc()
(或其系列)的缓冲区已与free()
一起发布(或在realloc()
调用中间接释放)时,它将被重用 - 这意味着你可以预期它将在未来的分配中返回。这就是您首先想要free()
的原因。
答案 1 :(得分:1)
malloc
函数时,您要求在堆中提供一些空间。如果请求的空间存在,则malloc给出分配空间的起始地址。我们称之为 A 。 A 是已分配空间的起始地址。 free
时,我们正在请求解除分配,所以现在这个返回的空间可以由运行时使用。因此,从已分配字节的位置 A 开始的内存将被释放并返回到运行时。 希望它有所帮助!
答案 2 :(得分:0)
您没有明确表明您是否释放了它们。正如其他人所说,可以重复使用释放的内存区域,但是如果仍然分配,你当然不会获得相同的地址。
但是如果你用更高的尺寸重新分配(realloc()
和familly)它可以移动到其他地方,这样初始地址可以/可以在以后重复使用,即使没有释放任何东西。
示例:分配32 * sizeof(int)两次会得到地址:0xeee010 0xeee0a0
将第一个重新分配到64 * sizeof(int)会产生一个新地址:0xeee130
然后在第一个地址上分配另一个32 * sizeof(int):0xeee010