2013-05-18 88 views
0

我有一個簡單的函數,返回後,數組a [](作爲參數傳遞)的值被改變。問題在於它們甚至沒有寫在函數中,只是讀 - 至少應該 - 至少 - 。希望你能幫助我:C函數參數值自己改變

double *bhaskara(double a[]){ 
    double A = a[2], B = a[1], C = a[0]; 
    double raizes[2]; 
    double delta = B*B - 4*A*C; 
    if(delta<=0){//ignora delta para pegar soh a parte inteira das raizes 
     raizes[0] = -B/(2*A); 
     raizes[1] = raizes[0]; 
    }else{ 
     raizes[0] = (-B+sqrt(delta))/(2*A); 
     raizes[1] = (-B-sqrt(delta))/(2*A); 
    } 
    return raizes; 
} 

回答

5

你正在返回一個指向已經超出範圍的局部變量的指針。這是未定義的行爲。任何事情都可以發生。

+0

笑,織補你打我吧:)我把代碼示例.. :) –

3

你在這裏過一個更大的問題:

double raizes[2]; 
    .... function .... 
return raizes; 

您正在返回一個指針已經堆棧的局部功能上創建的值。 不好,永遠不要這樣做。

傳遞和輸入和輸出數組。

void bhaskara(const double a[], double raizes[]){ 
+2

感謝您不是說「使用'malloc'裏面的功能和返回指針」。如果可能,所有權最好不要進入和退出功能。 – chris

+1

在no ..我討厭創建內存,如果我不需要,如果你這樣做,我更喜歡使用shared_ptr ..然後再次,我離開malloc。 99%的時間你不需要自己處理內存,它只是導致泄漏:( –

+0

肯定在C++中,但C不具有RAII,所以你不得不在其他方面表達明確的所有權。 – chris