friend Array operator+(Array& s, Array& t) {
Array r;
int BIG = big(s, t); // 取較長長度
for (int i = 0; i < BIG; i++)
r.a[i] = s.a[i] + t.a[i]; // ❌ 短數組越界訪問
return r;
}
BIG 為較長數組長度,迴圈以 BIG 為上限。a[3]、a[4]... 導致**未定義行為** (記憶體破壞、死循環、崩潰)。Array() 僅分配 1 個 int,r.a 容量極小,寫入即越界。r.a = new int[BIG]; (需實現拷貝構造/賦值運算子/析構函數遵循 Rule of Three)。i < s.l 與 i < t.l,缺位補 0。at()。friend Array operator+(Array& s, Array& t) {
int BIG = max(s.l, t.l);
Array r(BIG); // 假設有參構造函數分配指定大小
for (int i = 0; i < BIG; i++) {
int sv = (i < s.l) ? s.a[i] : 0;
int tv = (i < t.l) ? t.a[i] : 0;
r.a[i] = sv + tv;
}
r.l = BIG;
return r;
}
**C++ 手動記憶體管理極易出錯**。除非教學/特殊場景,**生產代碼請直接使用 std::vector、std::string、智能指針** 等標準庫設施。