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] =] 回复你了。
根据规则,malloc 会为您提供所需的内存块,return 您将获得内存块的起始地址。您必须使用 digit 来释放内存,因为识别分配内存的唯一合法方法是指针 returned 在您的情况下它是 digits
给定以下行:
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] =] 回复你了。
根据规则,malloc 会为您提供所需的内存块,return 您将获得内存块的起始地址。您必须使用 digit 来释放内存,因为识别分配内存的唯一合法方法是指针 returned 在您的情况下它是 digits