首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

鏈式隊列初始化傳入空指針導致判空失敗的修正

     編輯:程式設計綜合問答

錯誤現象

調用 Init_Queue(&Q) 後,隊列指針 Q 仍為 NULL,導致後續 Empty_Queue 判斷崩潰。

根因

函數參數為 LinkQueue *Q(指針的指針),內部 Q = malloc(...) 只修改了**局部副本**,外部實參指針未被修改。

修正方案


// 1. 傳入指針的指針(雙重指針)
int Init_Queue(LinkQueue **Q) {
    *Q = (LinkQueue*)malloc(sizeof(LinkQueue));
    (*Q)->front = (*Q)->rear = (QueueNode*)malloc(sizeof(QueueNode));
    (*Q)->front->next = NULL;
    return 1;
}
// 調用:Init_Queue(&Q);

// 2. 或返回新指針
LinkQueue* Init_Queue() {
    LinkQueue *Q = malloc(sizeof(LinkQueue));
    Q->front = Q->rear = malloc(sizeof(QueueNode));
    Q->front->next = NULL;
    return Q;
}
// 調用:Q = Init_Queue();

核心原則

**C 語言參數傳值**,若需在函數內修改指針本身(指向新內存),必須傳遞指針的地址(二級指針)或返回新指針賦值給調用者。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved