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

C++ 幾何計算程序在 Win8/10 顯示異常:未初始化變量導致未定義行為

     編輯:程式設計綜合問答

代碼在 XP 下正常,升級至 Win8/10 後菜單顯示亂碼、輸入無響應。編譯器警告 C4700: 使用了未初始化的局部變量 'x' 直接揭示根因:int x; 未賦初值直接進入 while(x!=0) 判斷,導致未定義行為。不同編譯器/優化選項/運行環境下表現不同,XP 下恰好殘留 0 使程序「看似正常」。

錯誤代碼

int main() {
    int x;                 // 未初始化
    double r,l,w,h;
    shape *shape1 = 0;
    while (x != 0) { ... } // UB
}

修正

int main() {
    int x = 1;             // 任意非 0 值進入循環
    // ...
}

其他代碼質量問題

  • system("cls")、system("pause") 不可移植,建議用 ANSI 轉義序列或跨平台庫
  • 4/3 整數除法導致球體積公式錯誤,應為 4.0/3.0
  • 派生類未加 override (C++11) 易隱藏基類虛函數
  • 缺少虛解構函數 virtual ~Shape() {} 導致刪除派生對象時洩漏

現代化重構建議

  1. 使用 std::unique_ptr<Shape> 管理對象生命周期
  2. 菜單邏輯提取為獨立函數/類
  3. 輸入驗證:while(!(cin>>r)) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); }
  4. 單元測試覆蓋各幾何類
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved