音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

keilC 中建立單鏈表程序,大俠們看看是哪的毛病

作者:chariar 欄目:單片機(jī)
keilC 中建立單鏈表程序,大俠們看看是哪的毛病
struct det{
  uCHAR hole;
  uint sn;   //序列號
  uCHAR  stat;  //狀態(tài)
  struct det *next; //下一個地址
};
typedef struct det list;


/*---------------------建立單鏈表------------------------------------*/
list * creat(void) /*建立單鏈表的函數(shù)*/
{list *p,*h,*s; /* *h保存表頭結(jié)點(diǎn)的指針,*p指向當(dāng)前結(jié)點(diǎn)的前一個結(jié)點(diǎn),*s指向當(dāng)前結(jié)點(diǎn)*/  
h=(list *)malloc(sizeof(list)); /*分配空間并檢測*/
h->hole='\0';
h->sn='\0'; /*把表頭結(jié)點(diǎn)的數(shù)據(jù)域置空*/
h->stat='\0';
h->next=NULL; /*把表頭結(jié)點(diǎn)的鏈域置空*/
p=h; /*p指向表頭*/
s= (list *) malloc(sizeof(list)); /*分配新存儲空間并檢測*/
p->next=s; /*把s的地址賦給p所指向的結(jié)點(diǎn)的鏈域,這樣就把p和s所指向的結(jié)點(diǎn)連接起來了*/
s->hole=0;
s->sn=0;
s->stat=0;
s->next=NULL;
return h;
}

list * search(CHAR n) /*查找鏈表的函數(shù),n要查找的坑號,當(dāng)前結(jié)點(diǎn)的坑號小于n,后結(jié)點(diǎn)的坑號小于n,用于執(zhí)行插入前確定位置,返回<n的結(jié)點(diǎn)指針*/
{ list *p,*p1; /*p當(dāng)前指針,指向要與所查找的坑號比較的結(jié)點(diǎn),,p1后一結(jié)點(diǎn)的指針*/
  CHAR y; /*保存結(jié)點(diǎn)數(shù)據(jù)域內(nèi)坑號的變量*/  
  p=HEAD->next;
  while(p!=NULL)
  { y=p->hole;
    p1=p->next;
    if((p->next)!=NULL&&y<n&&n<(p1->hole))   /*把數(shù)據(jù)域里的坑號與所要查找的坑號比較,若相同則返回0,即條件成立*/
      return p; /*返回與所要查找結(jié)點(diǎn)的地址*/     
    else
      p=p->next;      
   
  }
  if(p==NULL&&(p->hole)<n) return p;
}

void insert(n,pin1,st1) /*插入坑號為n,序列碼為pin1,狀態(tài)字為st1的結(jié)點(diǎn)*/
{ list *s; /*指針s是保存新結(jié)點(diǎn)地址的*/
  list *p;
  if(n!=1)
  { p=search(n);
    s= (list *)malloc(sizeof(list));
    s->hole=n;
    s->sn=pin1;
    s->stat=st1;  
    s->next=p->next; /*把新結(jié)點(diǎn)的鏈域指向原來p結(jié)點(diǎn)的后繼結(jié)點(diǎn)*/
    p->next=s; /*p結(jié)點(diǎn)的鏈域指向新結(jié)點(diǎn)*/
  }
  else{
    s= (LINK) malloc(sizeof(list));
    s->hole=n;
    s->sn=pin1;
    s->stat=st1;  
    s->next=HEAD->next; /*把新結(jié)點(diǎn)的鏈域指向原來p結(jié)點(diǎn)的后繼結(jié)點(diǎn)*/
    HEAD->next=s; /*p結(jié)點(diǎn)的鏈域指向新結(jié)點(diǎn)*/  
   
  }                                                                                                      
}

void main(void)
{ list *HEAD;
  int y;
  y=init_mempool(0x1000,sizeof(list)*200);
  HEAD=creat();
  insert(1,12345,0x81);
  insert(2,23540,0x85);  
}

各位GGJJ幫忙看看,這程序有什么毛病,我的本意是想建立的一個單鏈表,只有個頭結(jié)點(diǎn)和尾,然后在插入兩個結(jié)點(diǎn),結(jié)果在執(zhí)行插入操作時,這兩個結(jié)點(diǎn)分配的空間地址s都為0x0000,所以導(dǎo)致每插入一個就將之前插入的那個結(jié)點(diǎn)給覆蓋掉了,但是在創(chuàng)建鏈表程序中melloc函數(shù)返回的值卻是正確的,郁悶

* - 本貼最后修改時間:2005-1-14 14:28:41 修改者:CHARiar

2樓: >>參與討論
不務(wù)正業(yè)
malloc 返回分配的地址空間,如果失敗應(yīng)該返回0
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
我是菜鳥幫忙看看好嗎?
AT89s52看門狗的使用
有可以替換62256的3V供電的低壓低功耗的RAM嗎?
伺服控制單元
請教各位一個不解的問題,為什么MAX515的輸出,每次都不一樣?
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號