2

我把这个贴在这里作为最后的手段。我完全被卡住了,不知道该去哪里。带着这个问题,我在寻找方向而不是答案

我有一个家庭作业,实际上似乎是一个很常见的作业。问题在第 11 页。这不是我的任务,但它是我在 Google 上找到的与我非常相似的任务。

我的导师给出了我们需要查看的相关信息是标题位的指导。

假设我们正在执行以下操作:free(0x400b010)

0x400b010包含0x400b601c.

如果我将此十六进制分解为二进制 - 特别是最后一个双字,我会得到以下信息

0x1c = 0001 1100

整个事情:

0x400b601c = 0100 0000 0000 1011 0110 0000 0001 1100

据我所知,1c这表明该内存已经空闲。因为最后一位是 0。在这种情况下,free 的行为将是未定义的。

但我的火车虽然准确吗?我什至把这个带向了正确的方向吗?

4

1 回答 1

3

您总是应该传递从其亲属或其亲属free()获得的指针。malloc想一想你如何使用这些指针。

要问自己的问题:

  • 返回的指针可以指向malloc头部吗?到页脚?为什么或者为什么不?
  • 你在看上面的标题内容吗?
  • 标题可能在哪里?

顺便说一句 - 链接的文档仅描述了堆分配器可能起作用的几种方式之一。

于 2009-08-15T20:37:33.140 回答