나는 C를 배우는 방법으로 gtk + 2.0 및 gtksourceview 2.0에서 텍스트 편집기를 작성하고 있습니다. 파일을 열려고하면 segfault가 나타납니다. sshfs에. 이것은 항상 문제가있는 것은 아니므로, sshfs와 관련이 있는지 여부는 알 수 없습니다.gtk_file_chooser_dialog_new()에서 g_slice_alloc() 세그먼트 화 오류
#define NUM_TABS 100
int notebookPages[NUM_TABS];
경로 글로벌 숯이다
notebookPages 정수 글로벌 배열
printf("\nentered open_activated\n");
GtkSourceLanguage *lang;
GtkSourceLanguageManager *lm;
GtkWidget *dialog;
GtkWidget *tablabel;
GtkTextBuffer *tbuffer;
int openTabs = 0;
const gchar *folder;
int page = 0;
char *path,*string;
page = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook));
path = paths[notebookPages[page]];
folder = folderFromPath(path);
printf("folder: %s\n\n",folder);
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), folder);
추가 정보 : 여기
내 오픈 함수에서 코드 블록이며 배열 :char paths[NUM_TABS][200];
내가 정말 잘 이해할 필요가 있음을 알고 어디 내 학습의 해당 위치에있어 #0 0xb6e1d257 in g_slice_alloc() from /usr/lib/libglib-2.0.so.0
#1 0xb6e1e42e in g_slist_prepend() from /usr/lib/libglib-2.0.so.0
#2 0xb6e27c74 in g_once_init_enter_impl() from /usr/lib/libglib-2.0.so.0
#3 0xb739e24e in gtk_dialog_get_type() from /usr/lib/libgtk-x11-2.0.so.0
#4 0xb73d1527 in gtk_file_chooser_dialog_get_type() from /usr/lib/libgtk-x11-2.0.so.0
#5 0xb73d15d6 in ??() from /usr/lib/libgtk-x11-2.0.so.0
#6 0xb73d1735 in gtk_file_chooser_dialog_new() from /usr/lib/libgtk-x11-2.0.so.0
#7 0x08050506 in open_activated (widget=0x8266878, parent=0x8083a60) at ledit.c:1715
#8 0xb6eea3dc in g_cclosure_marshal_VOID__VOID() from /usr/lib/libgobject-2.0.so.0
#9 0xb6ee8f5a in g_closure_invoke() from /usr/lib/libgobject-2.0.so.0
#10 0xb6efc816 in ??() from /usr/lib/libgobject-2.0.so.0
#11 0xb6f05168 in g_signal_emit_valist() from /usr/lib/libgobject-2.0.so.0
#12 0xb6f05302 in g_signal_emit() from /usr/lib/libgobject-2.0.so.0
#13 0xb755a3af in ??() from /usr/lib/libgtk-x11-2.0.so.0
#14 0xb6ee8f5a in g_closure_invoke() from /usr/lib/libgobject-2.0.so.0
#15 0xb6efc816 in ??() from /usr/lib/libgobject-2.0.so.0
#16 0xb6f04f13 in g_signal_emit_valist() from /usr/lib/libgobject-2.0.so.0
#17 0xb6f05302 in g_signal_emit() from /usr/lib/libgobject-2.0.so.0
#18 0xb734aaa1 in gtk_accel_group_activate() from /usr/lib/libgtk-x11-2.0.so.0
#19 0xb734bf22 in gtk_accel_groups_activate() from /usr/lib/libgtk-x11-2.0.so.0
#20 0xb7575e7d in gtk_window_activate_key() from /usr/lib/libgtk-x11-2.0.so.0
#21 0xb7575eec in ??() from /usr/lib/libgtk-x11-2.0.so.0
#22 0xb7427b44 in ??() from /usr/lib/libgtk-x11-2.0.so.0
#23 0xb6ee7a37 in ??() from /usr/lib/libgobject-2.0.so.0
#24 0xb6ee8f5a in g_closure_invoke() from /usr/lib/libgobject-2.0.so.0
#25 0xb6efc62c in ??() from /usr/lib/libgobject-2.0.so.0
#26 0xb6f04f13 in g_signal_emit_valist() from /usr/lib/libgobject-2.0.so.0
#27 0xb6f05302 in g_signal_emit() from /usr/lib/libgobject-2.0.so.0
#28 0xb755bbc6 in ??() from /usr/lib/libgtk-x11-2.0.so.0
#29 0xb7425d63 in gtk_propagate_event() from /usr/lib/libgtk-x11-2.0.so.0
#30 0xb742608f in gtk_main_do_event() from /usr/lib/libgtk-x11-2.0.so.0
#31 0xb72aa42a in ??() from /usr/lib/libgdk-x11-2.0.so.0
#32 0xb6dfed42 in g_main_context_dispatch() from /usr/lib/libglib-2.0.so.0
#33 0xb6dff508 in ??() from /usr/lib/libglib-2.0.so.0
#34 0xb6dffabb in g_main_loop_run() from /usr/lib/libglib-2.0.so.0
#35 0xb7424d59 in gtk_main() from /usr/lib/libgtk-x11-2.0.so.0
#36 0x0804d636 in main (argc=1, argv=0xbfad3774) at ledit.c:492
: 여기
char * folderFromPath(char *path)
{
printf("\nentered folderFromPath\n");
char *token[80];
int i = 0;
char str[80];
strcpy(str,path);
printf("path: %s\n", path);
token[0] = strtok(str, "/");
while (token[i]!= NULL)
{
i++;
token[i] = strtok (NULL, "/");
}
// char folder[128];
char *folder;
folder = malloc(sizeof(path));
if (folder != NULL)
{
int j = 0;
strcpy(folder,"/");
while (j < (i-1))
{
strcat(folder,token[j]);
strcat(folder,"/");
j++;
}
printf("folder: %s\n", folder);
return folder;
free(folder);
}
else
{
return "/";
}
}
은 GDB에서 역 추적입니다 : 여기 및는 함수 folderFromPath입니다 메모리 관리 및 포인터. 이 세그 폴트의 원인은 무엇입니까? 또는 더 이상 문제를 해결하는 방법에 대한 아이디어가 있습니까? 감사.
전체'notebookPages' 및'paths' 변수와'folderFromPath()'함수를 확장 할 수 있습니까? 기분이 좋지만 그걸 보지 않고서는 정말로 문제의 근원인지 알기가 어렵습니다. – sarnold
@sarnold, 나는 귀하가 위에 요청한 정보를 "추가 정보"의 원래 질문에 제공했습니다. 감사. – nomadicME