当前位置: 技术问答>linux和unix
链表和内存的操作
来源: 互联网 发布时间:2016-01-20
本文导语: 程序中有一个GtkClist,一个链表,链表内容将被显示到GtkClist中 下面是代码 GtkWidget *listbox; hlist *list; hlist *tail; hlist *find(char* name)//查找特定名称节点在链表中位置 { hlist *p=list->next; char *s; while(p) { s=p->host...
程序中有一个GtkClist,一个链表,链表内容将被显示到GtkClist中
下面是代码
GtkWidget *listbox;
hlist *list;
hlist *tail;
hlist *find(char* name)//查找特定名称节点在链表中位置
{
hlist *p=list->next;
char *s;
while(p)
{
s=p->hostname;
if(strcmp(s,name))
p=p->next;
else
return p;
}
return null;
}
void initlist()
{
list=(hlist *)malloc(sizeof(hlist));
tail=list;
list->hostname="";
list->next=null;
}
void updatelist()//更新列表
{
gtk_clist_clear(GTK_CLIST(listbox));
hlist *p=list->next;
while(p)
{
addtonamelist(p->hostname);
p=p->next;
}
gtk_widget_show(listbox);
}
void initnode(hlist* node,char* name)//初始化新节点
{
node->hostname=name;
node->next=null;
}
void newnode(struct sockaddr_in addr,char* name)//增加节点
{
if(!(find(name)))//如果是新节点
{
hlist *p=(hlist *)malloc(sizeof(hlist));
initnode(p,name);
tail->next=p;
tail=p;
updatelist();
}
}
下面是GtkClist选中的时候的回调函数
void listselect(GtkWidget *widget,gint row,gint column,GdkEventButton *event,gpointer data)
{
hlist * p;
gchar *name;
gtk_clist_get_text(GTK_CLIST(listbox),row,column,&name);
p=find(name);
if(p)
{
g_print("%sn",p->hostname);
}
else g_print("不存在!n");}
我新生成一个节点后,GtkClist能显示出来,但是我每次选中的时候都说不存在!!
我在这个回调函数里看了一下节点确实有两个,一个是头节点一个是新节点,但是节点好像没被初始化一样...哪里出问题了?
下面是代码
GtkWidget *listbox;
hlist *list;
hlist *tail;
hlist *find(char* name)//查找特定名称节点在链表中位置
{
hlist *p=list->next;
char *s;
while(p)
{
s=p->hostname;
if(strcmp(s,name))
p=p->next;
else
return p;
}
return null;
}
void initlist()
{
list=(hlist *)malloc(sizeof(hlist));
tail=list;
list->hostname="";
list->next=null;
}
void updatelist()//更新列表
{
gtk_clist_clear(GTK_CLIST(listbox));
hlist *p=list->next;
while(p)
{
addtonamelist(p->hostname);
p=p->next;
}
gtk_widget_show(listbox);
}
void initnode(hlist* node,char* name)//初始化新节点
{
node->hostname=name;
node->next=null;
}
void newnode(struct sockaddr_in addr,char* name)//增加节点
{
if(!(find(name)))//如果是新节点
{
hlist *p=(hlist *)malloc(sizeof(hlist));
initnode(p,name);
tail->next=p;
tail=p;
updatelist();
}
}
下面是GtkClist选中的时候的回调函数
void listselect(GtkWidget *widget,gint row,gint column,GdkEventButton *event,gpointer data)
{
hlist * p;
gchar *name;
gtk_clist_get_text(GTK_CLIST(listbox),row,column,&name);
p=find(name);
if(p)
{
g_print("%sn",p->hostname);
}
else g_print("不存在!n");}
我新生成一个节点后,GtkClist能显示出来,但是我每次选中的时候都说不存在!!
我在这个回调函数里看了一下节点确实有两个,一个是头节点一个是新节点,但是节点好像没被初始化一样...哪里出问题了?
|
hehe ,接分