向函数传递矩阵以及从函数返回矩阵
passing and returning matrix to and from a function
我正在编写一个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[]
释放内存。
相关文章:
- 从函数返回const char*数组
- 检查函数返回类型是否与STL容器类型值相同
- 从 c 或 cpp 系列子函数返回到主函数
- 从函数返回任意简单类型的数据
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 从 C++ 中的函数返回数组地址问题
- VirtDisk.h QueryChangesVirtualDisk() 函数返回 RangeCount 为 0
- 为什么glGetSubroutineIndex为不同的函数返回相同的值?
- 在 c++ 中将函数返回类型指定为模板参数
- 从封装在对象中的函数 C++ 返回时为空的列表
- 为什么向量内部的指针在从函数返回时会发生变化?
- 函数返回的 rvalue 引用(表达式)是 xvalue - 但没有标识?
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 寿命延长从函数返回引用
- 程序不向函数返回值
- 字符串函数返回奇怪的值
- 类的大问题,以及从空函数c++返回
- 为什么在尝试测量函数返回所需的时间时,我的运行时编号是错误的?
- C++二叉搜索树模板从函数返回节点
- NVCC 错误:string_view.h:constexpr 函数返回是非常量