我有这个功能:
char * folderFromPath(char *path)
{
printf("\nentered folderFromPath\n");
char *token[80];
int i = 0;
const int STR_LEN = 128;
char str[STR_LEN];
char *folder;
folder = malloc(sizeof(path));
strcpy(folder,"/");
if (strlen(path) > STR_LEN)
{
printf("Warning: strlen(path) > STR_LEN, (%d > %d) in function folderFromPath\n", strlen(path), STR_LEN);
}
else
{
printf("path: %s\n", path);
strcpy(str,path);
token[0] = strtok(str, "/");
while (token[i]!= NULL)
{
i++;
token[i] = strtok (NULL, "/");
printf("token[i]: %s, i: %d\n", token[i], i);
}
if (folder != NULL)
{
int j = 0;
while (j < (i-1))
{
strcat(folder,token[j]);
strcat(folder,"/");
j++;
}
printf("folder: %s\n", folder);
}
} /* else if (strlen(path) < STR_LEN) */
return folder;
}
在其中你可以看到我已经动态分配了指向的内存folder
。您还可以看到该文件夹返回给调用函数。我在这篇文章中看到建议在调用函数中使用指针后释放指针。这就是我所做的。这是调用函数:
void open_activated(GtkWidget *widget, GtkWindow *parent)
{
GtkSourceLanguage *lang;
GtkSourceLanguageManager *lm;
GtkWidget *dialog;
GtkWidget *tablabel;
GtkTextBuffer *tbuffer;
int openTabs = 0;
char *folder1;
const gchar *folder2;
int page = 0;
char *path;
page = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook));
path = paths[notebookPages[page]];
folder1 = folderFromPath(path);
folder2 = folder1;
dialog = gtk_file_chooser_dialog_new("Open File", parent, GTK_FILE_CHOOSER_ACTION_OPEN,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_OPEN,GTK_RESPONSE_ACCEPT,NULL);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog), folder2);
free(folder1);
tbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(txtinput[openedPages]));
gtk_source_buffer_begin_not_undoable_action(GTK_SOURCE_BUFFER(tbuffer));
if(gtk_dialog_run(GTK_DIALOG(dialog))== GTK_RESPONSE_ACCEPT)
{
...
} /* if(gtk_dialog_run(GTK_DIALOG(dialog))== GTK_RESPONSE_ACCEPT) */
gtk_widget_destroy(dialog);
changeLabelColor("black");
gtk_text_buffer_set_modified (gtk_text_view_get_buffer((GTK_TEXT_VIEW(txtinput[openedPages]))), FALSE);
gtk_source_buffer_end_not_undoable_action(GTK_SOURCE_BUFFER(tbuffer));
write_config_files();
verifyPaths();
}
当我尝试打开文件时,应用程序中止并生成以下语句:
*** glibc detected *** ./ledit: free(): invalid next size (fast): 0x082a80c8 ***
所以我的问题是这个错误是什么意思,我应该做些什么来正确释放指针?谢谢。