如何声明一个动态分配的数组全局,以便不需要在每个其他函数中初始化数组???
ushort ***array_3D;
ushort **array_2D;
extern int nexp;
int xarr,yarr;
/***********intialization************/
void initialize()
{
fflush(stdout);
printf("Hi");
int ii,jj,kk;
/*************** 2D array *********************/
// Allocate "main" array
//
array_2D = new ushort*[xarr];
// Allocate each member of the "main" array
//
for (ii = 0; ii < xarr; ii++)
array_2D[ii] = new ushort[yarr];
/***********************************************/
/************** 3D array ***********************/
// Allocate "main" array
//
array_3D = new ushort**[nexp];
// Allocate each member of the "main" array
//
for (ii = 0; ii < nexp; ii++)
array_3D[ii]= array_2D;
/***********************************************/
return;
}
/**************some other function***************/
void foo
{
int ii,kk,jj;
int src_buffer[200];
status = 0; /* initialize status before calling fitsio routines */
for (jj = 0; jj < naxes[1]; jj++)
for (ii = 0; ii < naxes[0]; ii++)
{
src_buffer[i]=int(rand());
array_2D[jj][ii]=int(src_buffer[n]);
array_3D[kk][jj][ii]= int(src_buffer[n]);
}
}
当我编译上面的程序时,它编译没有任何问题....但是当我运行程序时,我调用“foo”时会出现分段错误。迫切需要帮助。提前谢谢。
答案 0 :(得分:0)
您的意思是让array_3D
中的每个条目指向完全相同的2D数组吗?我猜不是。 (但这可能不是你的段错误的原因。)
您的代码未指明xarr
,yarr
,nexp
和naxes[...]
获取其值的方式。如果他们没有正确匹配 - 例如, naxes[0]
大于yarr
- 然后foo
将尝试访问您分配的内容之后的内容。
功能foo
使用i
作为src_buffer
的索引,但未定义i
。如果您有一个名为i
的全局变量,请立即更改 。如果要说ii
那么,如果naxes[0]
大于200,那么你将写出src_buffer
的结尾。
功能foo
使用n
作为src_buffer
的索引,但未定义n
。如果您有一个名为n
的全局变量,请再次更改它。否则,n
意味着什么?