我在我的课上有一个如下函数。指向2d数组,程序编译但在运行时抛出分段错误
bool ncread_llt::get_dataArray_atOnce (float **data)
{
startp[0]=0;
countp[0]=ntime;
float vdata[ntime][nlat][nlon];
dataVar.getVar(startp, countp, &vdata);
int offset=0;
for(int t =0; t<ntime; t++)
{
for (int i = 0; i < nlat - 1; i++)
{
for (int j = 0; j < nlon - 1; j++)
{
offset=i*nlat+j;
data[t][offset]=vdata[t][i][j];
}
}
}
return(true);
}
,我把它在我的主要程序是这样
float **rain[ntime][rain_pts]; //I get segfault in the next line.
ncf1.get_dataArray_atOnce (**rain); //ncf1 is an object of the classs ncread_llt
这个事情的作品与载体格式,但我需要使用的库函数这就需要二维数组作为输入。我不知道Iam在这里做了什么错误。我尝试过几种指针符号的组合,但它不能编译,编译时(上面的组合)会出现分段错误。这段代码有什么问题,以及它编译的原因。
你能发布你得到的编译错误和他们相关的行号吗? – 2to1mux 2013-03-25 03:34:13
../simplyMapBase/swlib/ncio.hh:45:注意:候选人是:bool ncread_llt :: get_dataArray_atOnce(double **) ../simplyMapBase/swlib/ncio.hh:46:note:bool ncread_llt :: get_dataArray_atOnce (float **) 当我调用函数为ncf1.get_dataArray_atOnce(rain); – 2013-03-25 04:16:42
大多数时候,我不知道是谁告诉你'type ** var'和类型'var [n] [m];'是等价的,但是你可以告诉他们他们错了*。他们不是。你正在声明一个'[ntime] [rain_pts]'指向浮点指针的数组,然后对它进行双解引用(有效地检索rain [0] [0],这是一个不确定的指向指针的指针并将其发送到'get_dataArray_atOnce()'。正如所写的,'get_dataArray_atOnce()'中的'data'没有办法正确解除引用。 – WhozCraig 2013-03-25 05:07:25