我可以释放最初从另一个指针分配的内存吗?

标签 c pointers malloc

如果我从另一个指针分配内存,然后声明一个指针等于另一个指针,我可以通过在新指针上使用 free() 释放第一个指针分配的内存吗?

例子:

typedef struct foo{
  int n;
  char c;
} foo;

foo* bar = malloc(sizeof(foo));
foo* tmp = bar; // declaring pointer identical to other pointer

free(tmp); // can I do this to free *bar?

最佳答案

是的,完全没问题。

malloc 的实现很可能会在返回指向它的指针之前将内存块标记为已分配。

现在您可以拥有任意数量的指向这 block 内存的指针变量,您可以通过对其中任何一个调用 free 来释放该内存。

指针本身并不包含它指向的内存是否已经分配的信息。它只是指向它。

int* i = malloc(sizeof(int) * 23);
int* j = i;

free(j); 
// free(i); // this is undefined behavior, the memory was already freed

关于我可以释放最初从另一个指针分配的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40333064/

相关文章:

c - 简单的C练习。最后一个位置被覆盖

使用 malloc 和 realloc 将静态数组更改为动态数组?

c++ - 未定义与未指定与实现定义的行为

c - 如何从文本文件中读取格式化行并将信息保存在链表中? IN C

c - C 程序的文件输出在计算行数时表现异常

pointers - 在 golang 中打印一组空接口(interface)?

c - 在 C 中使用字符串数组时出错

c - 链接列表,在函数中将列表头作为参数传递时不起作用

c - 比较相等的两个指针是否转换为整数类型比较相等?

更正字符串数组 C 的 free()