2013-05-18 87 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