代碼中 L->length 遞增賦值後輸出異常,改用直接賦值 L->length = List_Size 則正常。
SqList *L 傳入時若未對 length 歸零,記憶體殘留垃圾值,++L->length 基於垃圾值遞增,結果不可預期。
Status List_Init(SqList *L) {
L->elem = (int*)malloc(LIST_INIT_SIZE * sizeof(int));
if (!L->elem) return OVERFLOW;
L->length = 0; // 關鍵:歸零
L->listsize = LIST_INIT_SIZE;
return OK;
}
插入函數前必須呼叫 List_Init(&L),或在主程式宣告時 SqList L = {0}; 零初始化。
++L->length 本身正確,前提是起始值為 0。