考虑下面的代码:
int * a = malloc(sizeof *a * 10);
int * b;
b = a; //Is there an operation "b = malloc(sizeof *a * 10);" occuring?
free(b); //will the memory of 'a' be free?
另外,如何测试一块内存是否被释放?
答案 0 :(得分:2)
b = a; //Is there an operation "b = malloc(sizeof *a * 10);" occuring?
不,将 a
分配给 b
只是将 b
设置为具有 a
的值。由于 a
是一个指针,b
则指向 a
指向的同一位置。
free(b); //will the memory of 'a' be free?
是的,在 b = a;
之后,free(b);
将释放 a
指向的内存。请注意,这不是内存的 a
,而是内存a
指向。 C 不创建或维护指针与其指向的内存之间的任何连接或所有权关系。指针只是具有地址值的东西。
内存最初是通过 a
分配并分配给 a = malloc(…)
的这一事实不会在 a
和内存之间创建任何特殊关系。可以使用其他指针来访问和释放内存,a
的值可以更改为完全不相关的值而不影响内存。