日期:2014-05-16  浏览次数:20929 次

链表和内存的操作
程序中有一个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 ,接分