链表和内存的操作
程序中有一个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( "%s\n ",p-> hostname);
}
else g_print( "不存在!\n ");}
我新生成一个节点后,GtkClist能显示出来,但是我每次选中的时候都说不存在!!
我在这个回调函数里看了一下节点确实有两个,一个是头节点一个是新节点,但是节点好像没被初始化一样...哪里出问题了?
------解决方案--------------------hehe ,接分