gpt4 book ai didi

c - 使用 free() 函数

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

我只是有一个关于 C 中 free() 函数行为的一般性问题。

我是否可以正确地假设通过调用 free() 它只是释放指针指向的内存,但保持指针完好无损?

换句话说,指针不需要重新初始化,只需要重新分配内存,如果我想重用指针?

例如,这段代码是否合法?

原版

void foo()
{
data_t *x;
int y = 0;

while(x->data != some_value)
{
x = some_function(y);
y = some_other_function(x);
free(x);
}
}

修订版

void foo()
{
data_t *x;
int y = 0;

x = some_function(y);

while(x->data != some_value)
{
y = some_other_function(x);
free(x);
x = some_function(y);
}
}

忽略实际代码(以及 data_t 的内部结构)并假设 some_function() 正确 malloc() x;我只想知道这是否是管理内存的正确方法,或者我是否需要在每次释放后重新初始化 data_t *x

编辑:我编辑了代码,因为我意识到它没有正确说明我的问题。

最佳答案

释放 x 然后转到下一个 while 检查将导致未定义的行为

因为在下一个 while 检查中,您使 while(x->data != some_value) 并且 x 已经被释放

在进行下一次 while 检查之前,您必须将 x 赋给它的下一个值

顺便说一句:即使在 while 开始时(在第一次检查中),您也有未定义的行为,因为 x 没有在 while 之前启动到内存区域循环。


基于问题EDIT

新案例中的 free(x) 没有效果。

当您释放 x 时,x 指针保留 x 指向的旧内存地址,但内存不再分配,它是空闲的。

当你在释放后给x分配新分配的内存时,x将指向新的内存区域

关于c - 使用 free() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19288641/

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