向函数传递矩阵以及从函数返回矩阵

passing and returning matrix to and from a function

本文关键字:函数 返回      更新时间:2023-10-16

我正在编写一个c++程序,该程序向函数发送1D数组。函数操作数组并返回另一个相同顺序的数组。代码如下。我在编译它时遇到问题。请帮我解决错误。感谢#include

#include <ctime>
#include<cstdlib>
using namespace std;
long double * gradiv(long double *,int,long double);
int main ()
{
    int NN=3,c;
    long double *pp;
    long double hx;
    long double matt[NN+2]={10,9,30,63,50};
    pp = gradiv(matt,NN,1.0);
    for (c=0;c<NN+1;c++)
        cout<<endl<< *(pp+c)<<endl;
    return 0;
}

long double *gradiv(long double *matt,int NN,long double hx )
{
    int i,sg1,sg2;
    long double retmat[(NN+2)];
    retmat[0]=0;retmat[1]=0;retmat[NN]=0;retmat[NN+1]=0;
    for (i =2; i <=(NN-1); i++)
    {
            if (i==2){
                sg1=0;
                sg2=1;
                }
            else if (i==(NN-1)){
                sg1=1;
                sg2=0;  
                }
            else{
                sg1=1;
                sg2=1;
                }
        //===== my main formula for gradient(modified due to complication in the boundary)========
            retmat[i]=((*(matt+i)-*(matt+i-1))/hx+(*(matt+i+1)-*(matt+i))/hx)/(sg1+sg2);
            //cout <<retmat[i]<<endl;
        //========================================================================================
    }
return retmat;
}

错误消息是

saurav@sg:~/Desktop/project$ g++ test.cpp 
test.cpp: In function ‘long double* gradiv(long double*, int, long double)’:
test.cpp:23:14: warning: address of local variable ‘retmat’ returned [-Wreturn-local-addr]
  long double retmat[(NN+2)];

您正在将地址返回到本地变量long double retmat[(NN+2)];中。在函数执行后,它将变为无效。您可以通过使用new:为其分配内存来解决此问题

long double* retmat = new long double[(NN+2)];

或者使用std::vector或其他具有托管内存的容器。如果使用new[]分配内存,则必须稍后使用delete[]释放内存。