【问题标题】:Custom malloc algorithm自定义malloc算法
【发布时间】:2013-10-19 01:58:32
【问题描述】:

我目前正在开发一个自定义 malloc 函数,该函数要么定期添加它,要么添加到最适合的块中。意思是最接近大小的块。我在程序中最合适的部分遇到了麻烦。这是我拥有的代码:

我也有:

static  * First = NULL;
static  * Rover = NULL;

因此,在最适合的函数中,我有一个 do while 循环,它围绕循环链表进行一次。它应该找到最适合用户尝试 malloc 的内存的块。除非它在以下位置出现故障:

if(best->size > Rover->size)

我认为我的逻辑是有道理的,但我不明白为什么我会遇到 seg 错误。

在函数的最开始,我最好声明为:

 *best = NULL;
best = Rover;

有什么想法吗?

【问题讨论】:

  • 你为什么从问题中删除你的代码? SSCCE 基本上总是首选而不是用文字解释您的代码。
  • 代码应该在哪个平台上运行?适用于 Windows 还是 Unix?

标签: c algorithm function segmentation-fault malloc


【解决方案1】:

我认为您需要初始化 best 以指向一个大小为零的虚拟块。为了确保您可以在您第一次运行您的故障测试时测试best 是否为 NULL。假设它为空,则错误来自在best->size 中取消引用 NULL

或者您也可以在您的尺寸测试之前为best == NULL 添加一个测试。如果它是 NULL 则属于相同的 best = Rover... 代码。这更简洁,但由于额外的测试,对性能有轻微影响。

【讨论】:

  • 所以你的意思是让最好->size = 0?
  • 那种。如果 best 指向 null 那么你不能取消引用它。因此,您要么不必取消引用(首先测试它是否为 NULL)。或者将其分配给大小为 0 的虚拟结构,以便您可以比较有效的东西。
  • 好的,我能得到它!但现在它陷入了下面的 while(1) 循环中。对此有什么想法吗?
  • 您需要一个退出条件。 While (1) 表示永远循环。你想在什么条件下循环结束?
  • 好吧,就像 else 后面的 break 语句一样?
猜你喜欢
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
相关资源
最近更新 更多