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
意味着什么