2011-04-08 46 views
0

我该如何声明一个动态分配的数组全局,以便该数组不需要在每个其他函数中初始化?我该如何声明一个动态分配的数组全局

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]); 
     } 
} 

当我编译上面的程序它编译没有任何问题....但是当我去运行程序,我得到段错误时,我称之为“富”。急需帮助。提前致谢。

回答

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