結構體陣列 FF ff[DOU] 中 first/second 為 char[100],未初始化導致輸出包含隨機亂碼,strlen 計算長度異常。
new FF[DOU] 僅分配記憶體,**不會**自動將字元陣列置零。殘留記憶體內容被視為字串一部分。
struct FF {
char first[100];
char second[100];
bool flag;
FF() { memset(first, 0, sizeof(first)); memset(second, 0, sizeof(second)); flag = false; }
};
或分配後立即清零:
FF *ff = new FF[DOU];
for (int i = 0; i < DOU; ++i) {
memset(ff[i].first, 0, sizeof(ff[i].first));
memset(ff[i].second, 0, sizeof(ff[i].second));
}
首次輸出 ff[0].first 長度非 1,因為記憶體中恰好在有效字元後遇到 \0,但前方殘留資料被 strlen 計入;後續元素同理。
std::string、std::array、std::vector 避免手動記憶體管理。