代碼在 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.0override (C++11) 易隱藏基類虛函數virtual ~Shape() {} 導致刪除派生對象時洩漏std::unique_ptr<Shape> 管理對象生命周期while(!(cin>>r)) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); }