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

C 語言指針未分配內存導致運行時錯誤的經典案例分析

     編輯:程式設計綜合問答

錯誤代碼片段


void finemax(int *p, int *q, int k) {
    int i, *m, *n;
    *m = *p;  // 錯誤:m 未初始化,指向隨機地址,寫入導致未定義行為
    *n = *q;
    // ...
}

錯誤本質

int *m, *n; 僅聲明指針變量,**未分配指向的內存空間**。隨後 *m = *p 嘗試向野指針寫入,導致段錯誤/數據破壞。

正確做法

此處不需要指針,直接用整型變量存儲最大值及對應學號:


void finemax(int *p, int *q, int k) {
    int i, maxScore = *p, maxId = *q; // 初始化為第一個元素
    for (i = 1; i < k; i++) {
        if (p[i] > maxScore) {
            maxScore = p[i];
            maxId = q[i];
        }
    }
    printf("最高分是:%d,學號為:%d\n", maxScore, maxId);
}

指針使用鐵律

  1. 聲明指針後**必須指向有效內存** (指向已有變量、malloc 分配、數組首地址) 才能解引用。
  2. 函數參數傳遞數組時,形參 int *p 直接接收首地址,函數內無需再聲明指針接收。
  3. 輸出型參數需調用方分配內存並傳入地址 (如 int *out,調用 finemax(..., &result))。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved