gpt4 book ai didi

c - 从内存中释放一个结构体数组

转载 作者:行者123 更新时间:2023-11-30 17:44:48 25 4
gpt4 key购买 nike

我有以下函数。我认为 free(temp) 没有释放所有分配的内存。当我给这三个字段赋予 NULL 时,我的程序工作正常。当我给它们提供常规值时,我的程序被 Linux 杀死正常IO操作20分钟后。在这20分钟里,我的程序一开始运行得很快,然后变慢,然后被杀死。所以我想我也应该释放字段的分配或者发生其他事情?这些字段是 char*。

void traverseAlignLList()
{
Node1 *temp;
struct Node *old_node;
int temp_counter=0;
int i;
cur_node=start_node;
temp=malloc(alignCounter*sizeof(Node1));
while(cur_node!=NULL)
{ temp[temp_counter].template_id=malloc((strlen(cur_node->template_id)+1)*sizeof(char));

strcpy(temp[temp_counter].template_id,cur_node->template_id);


temp[temp_counter].target_sequence=malloc((strlen(cur_node->target_sequence)+1)*sizeof(char));

strcpy(temp[temp_counter].target_sequence,cur_node->target_sequence);
temp[temp_counter].template_sequence=malloc((strlen(cur_node->template_sequence)+1)*sizeof(char));

strcpy(temp[temp_counter].template_sequence,cur_node->template_sequence);

temp_counter++;

old_node=cur_node;
cur_node=cur_node->next;

free(old_node);



addAlignData(temp);


free(temp);
temp=NULL;

start_node=NULL;
}

最佳答案

因为 C 不知道分配了哪些指针以及哪些指针指向 e。 G。从静态内存中,您必须显式释放之前 malloc() 释放的所有内容。否则就会出现内存泄漏。

例如,如果 Node1 的内容是

.template_id=malloc((strlen(cur_node->template_id)+1)*sizeof(char));
.target_sequence=malloc((strlen(cur_node->target_sequence)+1)*sizeof(char));
.template_sequence=malloc((strlen(cur_node->template_sequence)+1)*sizeof(char));

您稍后必须再次释放它们。

仅使用 free(old_node)free(temp),您将丢失指针,而内存仍保持分配状态。

同样,您必须在释放所有内容的相同条件下释放它。

如果您malloc()您的temp,然后跳过while循环,您将丢失它。

关于c - 从内存中释放一个结构体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19846777/

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