void finemax(int *p, int *q, int k) {
int i, *m, *n;
*m = *p; // 錯誤:m 未初始化,指向隨機地址,寫入導致未定義行為
*n = *q;
// ...
}
int *m, *n; 僅聲明指針變量,**未分配指向的內存空間**。隨後 *m = *p 嘗試向野指針寫入,導致段錯誤/數據破壞。
此處不需要指針,直接用整型變量存儲最大值及對應學號:
void finemax(int *p, int *q, int k) {
int i, maxScore = *p, maxId = *q; // 初始化為第一個元素
for (i = 1; i < k; i++) {
if (p[i] > maxScore) {
maxScore = p[i];
maxId = q[i];
}
}
printf("最高分是:%d,學號為:%d\n", maxScore, maxId);
}
malloc 分配、數組首地址) 才能解引用。int *p 直接接收首地址,函數內無需再聲明指針接收。int *out,調用 finemax(..., &result))。