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

C++ 指針未初始化導致運行時崩潰:修正野指針賦值

     編輯:程式設計綜合問答

代碼編譯通過但運行崩潰:

int a, b, *c;
cin >> a >> b;
*c = b;  // 崩潰:c 未初始化,指向隨機地址
cout << Two(a, c);

錯誤原因

  • int *c; 僅聲明指針變量,未分配指向的內存,值為隨機地址 (野指針)。
  • *c = b; 嘗試向隨機地址寫入 → 段錯誤/訪問違例。

修正方法 (兩種)

  1. 指向現有變量 (推薦,無需 new/delete):
    int a = 0, b = 0;
        int *c = &b;  // c 指向 b 的地址
        cin >> a >> b;
        cout << Two(a, c);  // 正常
        
  2. 動態分配內存:
    int *c = new int;  // 分配一個 int 空間
        *c = b;
        cout << Two(a, c);
        delete c;  // 釋放
        

函數簽名優化

若函數不修改指針指向的值,建議用 const int*:

int Two(int a, const int* c) {  // 承諾不修改 *c
    return (a >= *c) ? a : *c;
}

核心鐵律

指針使用前必須初始化:指向合法對象 (&var)、動態分配 (new)、或置 nullptr。未初始化指針是 C/C++ 最常見運行時崩潰源頭。

修正指針初始化,程序即可正常運行輸出較大值。

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