代碼編譯通過但運行崩潰,典型原因是循環條件寫錯導致指針越界訪問未初始化內存。
char* p[4] = {"asdf","xczv","df","gr"};
for (int i = 0; i < 4; i++) { // 外層 0~3
for (int j = 0; j < 4; j++) { // 內層 0~3
if (strcmp(p[j], p[j+1]) > 0) // j=3 時 p[4] 越界!
for (int i = 0; i < 3; i++) { // 外層只需 n-1 輪
for (int j = 0; j < 3 - i; j++) { // 內層遞減,避免重複比較
if (strcmp(p[j], p[j+1]) > 0) {
char* temp = p[j]; p[j] = p[j+1]; p[j+1] = temp;
}
}
}
strcmp 行assert(j+1 < 4)冒泡排序內層上限應為 n - 1 - i,這是教科書級邊界條件,必須刻入肌肉記憶。