Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 堆及;免费作业_C_Heap_Free - Fatal编程技术网

C 堆及;免费作业

C 堆及;免费作业,c,heap,free,C,Heap,Free,我把这个贴在这里作为最后的手段。我完全被卡住了,不知道该把这个带到哪里去。有了这个问题,我在寻找方向,而不是答案 我有一个家庭作业,这看起来是一个相当普遍的作业。问题是。这不是我的作业,但我在谷歌上找到的作业与我的作业非常相似 我的导师给出了指导,我们需要查看的相关信息是标题位 假设我们正在执行以下操作:free(0x400b010) 0x400b010包含0x400b601c 如果我把这个十六进制转换成二进制,特别是最后一个双字,我会得到如下结果 0x1c = 0001 1100 整个事情:

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

我有一个家庭作业,这看起来是一个相当普遍的作业。问题是。这不是我的作业,但我在谷歌上找到的作业与我的作业非常相似

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

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

0x400b010
包含
0x400b601c

如果我把这个十六进制转换成二进制,特别是最后一个双字,我会得到如下结果

0x1c = 0001 1100
整个事情:

0x400b601c = 0100 0000 0000 1011 0110 0000 0001 1100
据我所知,
1c
表示该内存已经空闲。因为最后一位是0。在这种情况下,free的行为将是未定义的


但是,我的列车虽然准确吗?我的方向对吗

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

要问自己的问题:

  • malloc
    返回的指针能否指向标题?到页脚?为什么
  • 您正在查看上面的标题内容吗
  • 标题可能在哪里


顺便说一句——链接文档只描述了堆分配器的几种工作方式之一。

我想我明白你的意思了,谢谢。关于你的“顺便说一句”,这本书只讨论了一种方法:隐式自由列表。它提到了其他方法,但是很少注意到它们,所以我假设这是隐式的自由列表。(至少,我认为这是您所指的。)因此,考虑到您所说的-
0x400b601c
是作为起点指向的值,头值将低于(堆增长)此值。这意味着我们不知道标题是怎么说的。。。除非
0x400b00c
是标头…“标头值将低于(堆增长)[传递给free的向量]”。是的。“这意味着我们不知道标题是什么……除非0x400b00c是标题”——你知道标题的结尾,你知道它有多大,是吗?所以你知道头在哪里。这会让你走上正轨。祝你好运