gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:18:29 27 4
gpt4 key购买 nike

如果我从另一个指针分配内存,然后声明一个指针等于另一个指针,我可以通过在新指针上使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com