Arrays 如何声明动态分配的全局数组
我如何声明一个动态分配的全局数组,这样就不需要在每个其他函数中初始化数组Arrays 如何声明动态分配的全局数组,arrays,dynamic,segmentation-fault,declaration,global,Arrays,Dynamic,Segmentation Fault,Declaration,Global,我如何声明一个动态分配的全局数组,这样就不需要在每个其他函数中初始化数组 ushort ***array_3D; ushort **array_2D; extern int nexp; int xarr,yarr; /***********intialization************/ void initialize() { fflush(stdout); printf("Hi"); int ii,jj,kk; /*************** 2D
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]);
}
}
ushort***数组_3D;
ushort**array_2D;
外部内部nexp;
int xarr,yarr;
/***********初始化************/
void initialize()
{
fflush(stdout);
printf(“Hi”);
int ii,jj,kk;
/***************二维阵列************************/
//分配“主”数组
//
数组_2D=新的ushort*[xarr];
//分配“主”数组的每个成员
//
对于(ii=0;ii
当我编译上面的程序时,它编译起来没有任何问题。。。。但当我运行de程序时,当我调用“foo”时,就会出现分段错误。急需帮助。提前感谢。您的意思是让
数组\u 3D
中的每个条目都指向完全相同的2D数组吗?我猜不是。(但这不可能是你的错误的原因。)
您的代码没有指示xarr
、yarr
、nexp
和nax[…]
如何获取它们的值。如果它们没有正确匹配——例如,naxes[0]
大于yarr
——那么foo
将尝试访问超出您分配的末尾的内容
函数foo
使用i
作为src\u缓冲区的索引,但未定义i
。如果您有一个名为i
的全局变量,请立即更改它。如果它的意思是说ii
,那么,同样,如果naxes[0]
大于200,那么您将写入src\u buffer
的末尾
函数foo
使用n
作为src\u缓冲区的索引,但未定义n
。如果您有一个名为n
的全局变量,请再次更改它。否则,n
意味着什么