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