这是一个很初级的问题,记录一下。早上在写数值分析作业时,写了一个函数,计算某个数组,然后返回。原本是这样子写的:
double* caculate_1(double x[],double y[])
{
double f1[4];
for(int i=0;i<4;i++){
f1[i]=(y[i]-y[i+1])/(x[i]-x[i+1]);
}
return f1;
}
主函数
f1=caculate_1(x,y);
然后在主函数里打印了一下结果,发现完全不对。然而在函数里打印的记过是正确的,这就说明是传值的问题。后来查了一下,因为在函数中定义的数组f1在函数执行完后已经被系统释放掉了,所以在调用函数中得到的结果当然不是计算后的结果。有一个解决办法就是动态分配内存,在函数中new一个数组,这样就不会被释放掉了。
double* caculate_1(double x[],double y[])
{
double* f1=new double[4];
for(int i=0;i<4;i++){
f1[i]=(y[i]-y[i+1])/(x[i]-x[i+1]);
}
return f1;
}
当然最后不要忘了
delete[] f1;