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

C 語言線性表插入操作:長度變數未初始化導致輸出異常

     編輯:程式設計綜合問答

代碼中 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}; 零初始化。

補充

  • C 語言區域變數/動態記憶體**不會自動歸零**,務必顯式初始化。
  • 遞增邏輯 ++L->length 本身正確,前提是起始值為 0。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved