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

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

在被调用的函数中,我已经删除了另一个列表,并将列表返回给调用函数。 我已经释放了main函数中的列表,但是在delimma中是否需要释放被调用函数中的列表以获得内存性能。

#include  #include  #include  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;jdata); } g_slist_free(list1); return 0; } 

我是否需要从line_parser函数手动释放glist?

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

如果你确实需要释放它(例如,如果你要从strtok_r值)那么你很可能想要使用g_slist_free_full 。