我可以通过引用偏移指针来释放()吗?

时间:2011-01-20 08:11:50

标签: c memory-management malloc heap free

  

可能重复:
  Does the pointer passed to free() have to point to beginning of the memory block, or can it point to the interior?

我使用malloc()在堆上分配一些内存。我在指针中添加一个偏移量并将其返回到调用函数return ptr+(sizeof(char)*4)),其中此返回值存储在ptrReturned中。

最大的问题是,当free(ptrReturned)从分配的块的开头偏移sizeof(char)*4时,整个块将被释放,或者它将从偏移中释放内存直到分配块的结尾?我使用的编译器是MSVC ++ 2008。

如果分配的地址存储在链表中,并且有指向前一项的指针,那么它应该将整个块从前一个指针为NULL的位置释放到下一个指针为NULL的位置,对吧?

我已尝试调试并观察内存,但我无法覆盖已释放的块空间。有没有办法可以在定义的地址上显式尝试和分配堆上的空间,并且可能因尝试分配已分配的内存而获得异常?这样我就能知道,如果有的话,当然没有更简单的答案。

我希望问题很明确,如果我在某些信息上缺失,请在评论中告诉我。感谢。

2 个答案:

答案 0 :(得分:8)

您必须将相同的指针值传递给malloc()返回的free(),否则您的程序将具有未定义的行为。你期望它可能释放全部或部分已分配的块是没有根据的。

答案 1 :(得分:2)

我从标准中找到以下引用:

  

否则,如果参数没有   匹配之前返回的指针   calloc,malloc或realloc   功能,或者如果空间已经存在   通过免费或免费电话解除分配   realloc,行为未定义。