2016-06-07 99 views
3

我已經寫了下面的函數查找在float數組最小和最大的元素:使用OUT參數,

void find_minmax_float(float * begin, float * end, 
       float ** min, float ** max) { 
    if(begin == end) { //if it is not an array 
     *min = *max = 0; 
    } else { //if atleast 1 element exist 
     *min = *max = begin; 
     while(++begin != end) { 
      if(*begin < ** min) *min = begin; 
      if(*begin > ** max) *max = begin; 
     } 
    } 
} 

我用下面的代碼進行測試:

float floats[] = { 0.9, 1.11, 2.35, 5.999 }; 
int size = sizeof(floats)/sizeof(floats[0]); 
float * fmin; 
float * fmax; 

find_minmax_float(floats, floats + size, &fmin, &fmax); 
printf("float[]\tmin=%f\tmax=%f\n", *fmin, *fmax); 

,但我得到這個奇怪的在終端輸出:

float[] min=0.000000 max=5.999000 

很顯然,我得到min值不正確,而max似乎沒關係。我無法弄清楚什麼是錯的!我應該得到min=0.900000

我試過0.1到0.9,我總是得到0.000000分鐘。

+3

嗯 - [對我有用](http://ideone.com/GX2ryd) - 你在用什麼編譯器? –

+0

@PaulR GCC 4.8.4 ok我會測試這個隔離的東西(現在它在一大堆垃圾裏) –

+3

我會添加調試輸出來轉儲'find_minmax_float()'中使用的所有地址。此外,在'while'循環的頂部打印* begin,** min和** max的值也不會造成什麼影響。 – donjuedo

回答

0

fminfmax是未初始化的指針。您的代碼只是調用未定義的行爲。

0

我不知道我是否應該刪除該問題。無論如何,問題是我的代碼中的其他地方顯然覆蓋了我的陣列中的第一個元素。

非常感謝給誰測試我的代碼的人:P