复制指针时,是否也复制了内存?

时间:2021-05-05 22:31:21

标签: c

考虑下面的代码:

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?

另外,如何测试一块内存是否被释放?

1 个答案:

答案 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 的值可以更改为完全不相关的值而不影响内存。

相关问题