関数に1D配列を送るC++プログラムを書いています。関数は配列を操作し、同じ順序の別の配列を返します。 コードは次のとおりです。私はそれをコンパイルするのに問題があります。エラーのトラブルシューティングを手伝ってください。関数との間で行列を渡したり返したりする
#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;
}
の#include おかげで、エラーメッセージは、あなたがローカル変数long double retmat[(NN+2)];
にアドレスを返却している
[email protected]:~/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)];
開始するには、 'std :: arrray'を調べる価値があります。また、特定の質問をしてください。曖昧なものではありません。 –
std :: arrayはどこに追加されるべきですか?私はC++の初心者です 具体的な質問は、配列 "retmat"の値が呼び出されるたびに関数から返されるようにしたいということです。しかしそれはそうではありません。 – user3057202
Googleにお願いします。 'std :: vector'も参照してください –