在我正在编写的程序中,我正在实现二叉树和链表结构;因为我不知道我需要多少节点,所以我将它们放在堆上,如果它们需要更多空间,我会让程序使用 realloc()。
问题是这样的结构包括指向同一结构中其他位置的指针,并且由于 realloc() 移动结构,我需要重做所有这些指针(除非我将它们更改为偏移量,但这会增加代码的复杂性和使用结构的成本,这比重新分配更常见)。
现在,这可能不是问题;我可以只取旧指针,从新指针中减去它,然后将结果添加到我需要更改的每个指针中。但是,这仅适用于可以减去两个指针并获得它们地址的差异(然后将该差异添加到另一个指针以获得指针前面那么多字节的指针);因为我在堆上工作,我不能保证地址的差异可以被条目的大小整除,所以正常的指针减法(它给出了中间的对象数)会引入错误。那么我如何让它给我字节的差异,即使它们在堆的两个不同部分中也能工作?