int* min(int a, int b, int c) { // 形參為值傳遞,返回局部變量地址 → 懸空指針
int *p = 0;
if (a < b) p = &a; else p = &b;
if (*p > c) p = &c;
return p; // 返回棧上局部變量地址,函數返回後無效
}
函數返回**局部變量地址**(`a`、`b`、`c`、`p` 均在棧上),調用者解引用導致未定義行為。
int min(int a, int b, int c) {
int m = a < b ? a : b;
return m < c ? m : c;
}
void min(int a, int b, int c, int* out) {
int m = a < b ? a : b;
*out = m < c ? m : c;
}
// 調用
int result; min(a,b,c,&result);
void min(int a, int b, int c, int& out) { ... }
min(a,b,c,result);