0

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

我也有:

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

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

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

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

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

 *best = NULL;
best = Rover;

有什么想法吗?

4

1 回答 1

0

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

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

于 2013-10-11T05:01:39.503 回答