我怎样才能声明一个动态分配的数组全局

时间:2011-04-08 11:47:51

标签: 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 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”时会出现分段错误。迫切需要帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的意思是让array_3D中的每个条目指向完全相同的2D数组吗?我猜不是。 (但这可能不是你的段错误的原因。)

您的代码未指明xarryarrnexpnaxes[...]获取其值的方式。如果他们没有正确匹配 - 例如, naxes[0]大于yarr - 然后foo将尝试访问您分配的内容之后的内容。

功能foo使用i作为src_buffer的索引,但未定义i。如果您有一个名为i的全局变量,请立即更改 。如果要说ii那么,如果naxes[0]大于200,那么你将写出src_buffer的结尾。

功能foo使用n作为src_buffer的索引,但未定义n。如果您有一个名为n的全局变量,请再次更改它。否则,n意味着什么?