gpt4 book ai didi

c - 函数调用后释放指针内存

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:02 25 4
gpt4 key购买 nike

我对 C 中的内存泄漏和内存释放有简单的疑问。这是我的简单示例

typedef struct{
uint16 a;
uint8 b[3];
uint8 c;
}log_msg;

typedef struct node{
log_msg list;
struct node *next;
}logs_t;

这是我的结构。如果我将数据存储在结构中。然后如果我想用一个指针访问结构来检查msg_log的列表。有必要取消分配指针/释放它。例子,

ret = Check_the_list(data);

uint8 Check_the_list(uint16 data)
{
logs_t *ptr = NULL;
uint8 brk = 0;
ptr = top;
while(ptr != NULL && brk == 0)
{
if(ptr->list.a == data)
{
brk = 1;
return 0;
}
else
{
ptr = ptr->next;
}
}
return 1;
}

有必要在这里取消分配/释放ptr。这会导致内存泄漏,如果这个函数多次调用而我没有释放ptr?。据我所知,这将在函数调用后自动取消分配,因为我没有使用动态内存。但即使我想与专家确认。所以请高手指点。

最佳答案

是的,你不需要 free() 任何东西,因为你还没有为 Check_the_list() 中的 ptr 分配任何内存.

最容易记住的方法是,无论何时执行 malloc()/calloc()/realloc(),然后执行免费()

旁白:您使用 brk 的循环条件不是必需的,因为您在找到数据后立即返回。所以 brk == 0 是不必要的,你可以完全消除 brk :

 while(ptr != NULL)
{
if(ptr->list.a == data)
{
return 0;
}
else
{
ptr = ptr->next;
}
}

关于c - 函数调用后释放指针内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24349157/

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