gpt4 book ai didi

c - 被调用函数中的 glib 列表是否需要空闲以释放内存

转载 作者:行者123 更新时间:2023-11-30 17:12:08 26 4
gpt4 key购买 nike

我有一个使用 glib 列表的简单程序,其中有一个函数将列表返回给调用函数

.在被调用函数中,我声明了另一个列表,并且该列表返回到调用函数。我已经释放了主函数中的列表,但不确定是否需要释放被调用函数中的列表以提高内存性能。

#include <stdio.h>
#include <string.h>
#include <glib.h>

char *col_trim_whitespace(char *str)
{
char *end;

// Trim leading space
while(isspace(*str)) str++;

if(*str == 0) // All spaces?
return str;

// Trim trailing space
end = str + strlen(str) - 1;
while(end > str && isspace(*end)) end--;

// Write new null terminator
*(end+1) = 0;

return str;
}


GSList* line_parser(char *str)
{

GSList* list = NULL;

char *token, *remstr=NULL ;


//use glist for glib



token = strtok_r(str,"\n",&remstr);





while(token != NULL)
{
if(token[0] == ' ')
{

token = col_trim_whitespace(token);
if(strcmp(token,"")==0)
{
token = strtok_r(NULL, "\n", &remstr);
continue;
}
}

list = g_slist_append(list, token);
token = strtok_r(NULL,"\n",&remstr);


}





return list;

}

int main()
{


int *av,i,j,length;
i=0;


char str[] = " this name of \n the pet is the ffffffffffffffffffffffffffffff\n is \n the \n test\n program";


GSList *list1 = line_parser(str);
// printf("The list is now %d items long\n", g_slist_length(list));
length = g_slist_length(list1);
// printf("length=%d", length);



for(j=0;j<length;j++)
{

printf("string = %s\n",(char *)g_slist_nth(list1,j)->data);

}

g_slist_free(list1);

return 0;

}

我需要从 line_parser 函数中手动释放 glist 吗?

最佳答案

就像 TingPing 提到的那样,strtok_r 不会分配任何内存,因此您不需要释放它。

如果您确实需要释放它(例如,如果您要 strdup 来自 strtok_r 的值),那么您很可能希望使用 g_slist_free_full .

关于c - 被调用函数中的 glib 列表是否需要空闲以释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31792236/

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