線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:854
推到 Plurk!
推到 Facebook!

關於link list搜尋字串的問題

尚未結案
光月
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-20 16:04:49 IP:211.75.xxx.xxx 未訂閱
最近開始學C++,遇到最多問題的就是有關於資料結構的部分...... 這次我是要寫一個通訊錄,有新增、刪除、排序、查詢......  
 
void na_search(){   //姓名搜尋函式
   char        *na;
   int i=0;
   cout<<"請輸入欲查詢之姓名:";
   cin>>na;
   stu=first;     //link移到第一位
   while(stu!=NULL||strcmp(stu->name,na)==0){   //stu=NULL或找到相同字串時離開
      stu=stu->next;
      i  ;
   }
   if(strcmp(stu->name,na)==0){   //找到相同字串時輸出結果
      output();
      output(i);
   }
   else cout<<"查無此姓名!";
}
我每次執行到這個function,就會出現類似記憶體錯誤的視窗,我是用BC,當然...我看不懂那個視窗是在寫什麼,只有一堆數字跟英文字,其中是指到一個類似找不到記憶體的訊息,類似0x234:???? 我想應該是strcmp找不到記憶體吧,但是我寫的流程沒有指到錯誤記憶體的地方啊,我研究了好久.....有大大能幫我指點一下嗎,感激啊!
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-20 20:25:52 IP:221.169.xxx.xxx 未訂閱
問題出在 cin >> na; 將資料寫入na的時候,na並沒有配置記憶體空間,所以寫入非法的記憶體空間了 將 char *na; 改成 char na[200]; 就ok了 另外,以後程式有錯誤訊息的時候,把哪一行指出來 別人比較能幫得上忙
光月
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-20 23:30:33 IP:140.130.xxx.xxx 未訂閱
引言: 問題出在 cin >> na; 將資料寫入na的時候,na並沒有配置記憶體空間,所以寫入非法的記憶體空間了 將 char *na; 改成 char na[200]; 就ok了 另外,以後程式有錯誤訊息的時候,把哪一行指出來 別人比較能幫得上忙
不好意思,忘了說我也試過陣列的寫法,不過都是結果都是一樣,會出現記憶體錯誤的情形,我貼一下我改的:
void name_search(){
        char        na[20];
   int i=0,j;
   cout<<"請輸入欲查詢之姓名:";
   cin>>na;
   stu=first;
   while(stu!=NULL){
      for(j=0;jname,na)!=0;j  ) <===應該是這邊開始出錯
              if(*(stu->name j)!=na[j])        break;
      i  ;
      if(strcmp(stu->name,na)==0)        break;
           stu=stu->next;
   }
   if(strcmp(stu->name,na)==0){
      output();
           output(i-1);
   }
   else cout<<"查無此姓名!"<
程式裡沒指出是哪邊出錯,只有一個記憶體的視窗跑出來,最上面有一排strcmp的字,應該是strcmp找不到2個其中一個字串變數吧.....,如果是用陣列給字串值,應該是沒問題才對,至於link的部分,我有把顯示資料的function,使用時完全正常,也就是說link並沒有指向錯誤記憶體的地方,可是一到strcmp這邊時就是會出錯......請各位大大明察....     
        
光月
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-20 23:43:58 IP:140.130.xxx.xxx 未訂閱
不好意思.....剛剛太匆忙了,以致貼錯了=.="  
 void name_search(){
        char        na[20];
   int j;
   cout<<"請輸入欲查詢之姓名:";
   cin>>na;
   stu=first;
   for(j=0;stu!=NULL||strcmp(stu->name,na)!=0;j  )<====錯誤應該是從這邊開始的
           stu=stu->next;
   if(strcmp(stu->name,na)==0){
      output();
           output(j-1);
   }
   else cout<<"查無此姓名!"<     
        
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-21 21:30:43 IP:221.169.xxx.xxx 未訂閱
 for(j=0;stu!=NULL||strcmp(stu->name,na)!=0;j  )
思考一下:當stu == NULL 的時候會發生什麼事呢? 先檢測 stu != NULL 為false 接著檢測 stu->name... 等等,這時候stu為NULL,怎麼還能取到name的內容? 如果真的要用兩個比較,你應該要用 && 這個運算子,前者為false,他就不檢查後者了
for (j=0; (stu != NULL) && (strcmp(stu->name, na) == 0);   j)
光月
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-21 22:01:05 IP:140.130.xxx.xxx 未訂閱
喔喔喔喔喔喔喔!!!!! 沒想到他檢查完stu!=NULL之後,還會繼續檢查strcmp啊..... 我以為他檢查到stu==NULL之後,應該就會直接跳離LOOP的說, 現在記憶體的問題終於解決了,謝謝上面這位熱心大大的指點。
系統時間:2024-05-19 12:43:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!