我目前正在研究一个自定义malloc函数,该函数可以定期将其添加到最佳拟合块中。表示最接近大小的块。我在程序的最合适部分遇到麻烦。这是我的代码:
我还有:
static * First = NULL;
static * Rover = NULL;
因此,在最佳拟合函数中,我有一个 do while 循环,可以绕循环链表一次。它应该找到最适合用户尝试 malloc 的内存的块。除了它在以下位置出现错误:
if(best->size > Rover->size)
我认为我的逻辑是有道理的,但我不明白为什么我会得到赛格错误。
在函数的开头,我将最佳声明为:
*best = NULL;
best = Rover;
有什么想法吗?
我认为您需要初始化best
以指向大小为零的虚拟块。 为了确保您可以测试,看看best
在第一次运行测试时是否为空。 假设它为 null,则错误来自取消引用 NULL best->size
或者,您也可以在尺寸测试之前为best == NULL
添加测试。 如果是空落入同一best = Rover
...法典。 这更干净,但由于额外的测试,性能略有影响。