给出以下一行:
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返回的整个内存范围是释放的,还是 digits 当前指向的 int 大小的块 - 当时, digits [1] ?或者是通过迭代释放整个范围的正确方法,即:
for (i = 0; i < 3; i++)
{
free(digits[i]);
}
我正在尝试了解对免费的调用范围。 malloc 返回的整个内存块是否已释放,或者只是一个子部分,当前由指针 digits 引用?
答案 0 :(得分:5)
您必须free()
从malloc()
获得完全相同的指针值。由malloc()
分配的整个内存块将立即释放。
你不能在malloc()
到free()
返回给你的缓冲区中间使用一个指针,但是你必须准确地传递给free()
{{1}你回来了。
答案 1 :(得分:1)
根据规则,malloc为您提供所需的内存块,并返回块的起始地址。你必须使用数字来释放内存,因为识别分配内存的唯一合法方法是在你的情况下返回的指针是数字