2011-04-08 72 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意味着什麼?