【发布时间】:2011-11-20 20:04:26
【问题描述】:
我们都知道 malloc 返回分配的内存块的起始地址,但我想我如何计算这个块的结束地址
int *p, *q;
p=malloc(4*sizeof(int));
q=p+4;
现在q 将指向结束地址块,但我想有一些其他方法来获取 malloc 分配的内存块的结束地址。
编辑
我想知道的另一件事是有办法确保我们处于分配块的末尾
【问题讨论】:
-
其实你没有。
4*sizeof(int)在几乎任何现代系统上都会产生 16。所以 +8 不会起作用。 -
p指向分配的内存结束后很远。在大多数情况下,您需要添加4(即使我认为它是实现定义的)。为什么你需要其他方法呢? -
@halfdan:你说得对,但似乎是出于错误的原因。 +8 将使指针前进 8*sizeof(int) 个字节。
-
既然你知道你已经分配了
4ints 的内存,你可以做p += 4。但最好复制p,这样你以后可以free。 -
@pmg 好的,我读到了。
p+4很好,但p+5是 UB。因此,该标准特别允许您指向末尾的 1。这是非常明智的。