作者 主題: C 指標沒有設定NULL, 但程式還能正常結束  (閱讀 2252 次)

0 會員 與 1 訪客 正在閱讀本文。

redjack

  • 活潑的大學生
  • ***
  • 文章數: 426
    • 檢視個人資料
小弟在看資料結構,邊看書練習打一些練習時,打了這串CODE, 做了一些修改並加上了粗體字的部份:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

typedef struct vehicle
{
      char name[30];
      int HP;
      int money;
      struct vehicle *pre;
      struct vehicle *next;
}car;

int main()
{
      car *first = NULL;
      car *current = NULL;
      car *prev = NULL;
      car *last = NULL;

      for(; ; )
      {
         int flag = 0;
         printf("enter 1 to quit..");
         scanf("%d", &flag);
         if (flag == 1)
               break;

         current = (car*) malloc (sizeof(car));

         if ( first == NULL)
               first = current;
               first->pre = NULL;
         if ( prev != NULL)
               prev->next = current;

         printf("Pleae input the car's name:");
         scanf("%s", current->name);
         printf("Pleae input the car's HP  :");
         scanf("%d", &current->HP);
         printf("Pleae input the car's cost:");
         scanf("%d", &current->money);

         current->pre = prev;
         current->next = NULL;
         prev = current;
      }

      last = current;

      current = first;
      while( current != NULL)
      {
         printf("The car: %s have %d horse power and worth %d dollars\n", current->name, current->HP, current->money);
         current = current->next;
      }

      printf("============================================================\n");

      current = last;
      while( current != NULL)
      {
         printf("The car:%s have %d horse power and worth %d dollars\n", current->name, current->HP, current->money);
         current = current->pre;
      }


      system("pause");
      return 0;
}

小弟的問題是:在我加上了粗體字的部份,使其從後面印回來時,一開始並沒有加上紅色那行,也就是沒有指定first->pre 是NULL  一直到後面在看整個CODE 時才發現
那麼為什麼下面那個while 迴圈,還能夠在第一筆記錄印完後就正常結束呢? @@??

謝謝大家的指導~
Knowledge is Power

zzz0072

  • 懷疑的國中生
  • **
  • 文章數: 53
    • 檢視個人資料
Re: C 指標沒有設定NULL, 但程式還能正常結束
« 回覆 #1 於: 2012-01-28 02:05 »
不知道有沒有弄錯,參考一下:
1. 是有機會剛好分配到的空間那pre那邊是0
2. prev一開始是null,所以第一次跑迴圈
    current->pre = prev;
    會讓first->pre設成null

題外話:
1. 下面的statements中
    if ( first == NULL)
        first = current;
        first->pre = NULL;
     如果沒有弄錯的話,first->pre = NULL;每次迴圈都會被跑到,雖然應該不會影響結果啦。
2. 我會儘量malloc後用memset把要到的空間清一下,雖然不知道這樣有沒有特別的缺點。

redjack

  • 活潑的大學生
  • ***
  • 文章數: 426
    • 檢視個人資料
Re: C 指標沒有設定NULL, 但程式還能正常結束
« 回覆 #2 於: 2012-01-28 02:25 »
不知道有沒有弄錯,參考一下:
1. 是有機會剛好分配到的空間那pre那邊是0
2. prev一開始是null,所以第一次跑迴圈
    current->pre = prev;
    會讓first->pre設成null

題外話:
1. 下面的statements中
    if ( first == NULL)
        first = current;
        first->pre = NULL;
     如果沒有弄錯的話,first->pre = NULL;每次迴圈都會被跑到,雖然應該不會影響結果啦。
2. 我會儘量malloc後用memset把要到的空間清一下,雖然不知道這樣有沒有特別的缺點。

原來如此 @@
第二行那個,我是遵照作者的寫法的。
想過在迴圈之外,就直接先產生一次
因為就這個CASE 而言,不輸入東西也是毫無意義的。(因為就是給人家練習的)
這樣的話,那幾行就不會每次都跑了。

memset 那邊,多謝提醒 ^^
感恩
Knowledge is Power