malloc 返回内存的空闲范围

Range of free on malloc returned memory

给定以下行:

 int *digits = (int *) malloc(3 * sizeof(int));

假设我们将值 1、2 和 3 存储在位置 digits[0]、digits[1]、digits[2].如下:

digits[0] = 1;
digits[1] = 2;
digits[2] = 3;

如果调用以下行:

free(++digits);

是否释放了 malloc 返回的整个内存范围,或者只是 int 当前指向的 digits 大小的块 - 当时, 位数[1]?或者是正确的方法,通过迭代释放整个范围,即:

for (i = 0; i < 3; i++)
{
    free(digits[i]);
}

我正在尝试了解对 free 的调用范围。 malloc 返回的整个内存块是否被释放,或者只是一个子部分,当前被指针 digits 释放?

您必须 free() 与从 malloc() 获得的指针值完全相同。 malloc() 分配的整个内存块将立即释放。

您不能使用 malloc() 返回给您的缓冲区中间的指针指向 free() 它,但您必须传递给 free() 正是 [=11] =] 回复你了。

http://linux.die.net/man/3/malloc 对此非常明确。

根据规则,malloc 会为您提供所需的内存块,return 您将获得内存块的起始地址。您必须使用 digit 来释放内存,因为识别分配内存的唯一合法方法是指针 returned 在您的情况下它是 digits