【发布时间】:2017-05-03 03:07:54
【问题描述】:
假设我通过创建指针 p1 来动态分配内存:
int *p1 = malloc(10*sizeof(int));
然后我创建第二个指针 (p2) 并使其指向同一个内存块:
int* p2;
p2 = p1;
然后我想将内存块返回到堆中,所以我给出以下命令:
free(p1);
我的问题是:内存块现在实际上是空闲的还是仍然被占用,因为 p2 仍然指向它(即阻塞它)?
【问题讨论】:
-
C 不像某些语言那样使用 引用计数,所以如果你
free内存它可以被重用,不管有多少指针指向它。这使得 C 比其他语言快得多 - 也更危险。