代碼編譯通過但運行崩潰:
int a, b, *c;
cin >> a >> b;
*c = b; // 崩潰:c 未初始化,指向隨機地址
cout << Two(a, c);
int *c; 僅聲明指針變量,未分配指向的內存,值為隨機地址 (野指針)。*c = b; 嘗試向隨機地址寫入 → 段錯誤/訪問違例。int a = 0, b = 0;
int *c = &b; // c 指向 b 的地址
cin >> a >> b;
cout << Two(a, c); // 正常
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++ 最常見運行時崩潰源頭。
修正指針初始化,程序即可正常運行輸出較大值。