2011-04-08 2 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]); 
     } 
} 

, когда я скомпилировать выше программы она компилируется без каких-либо проблем .... но когда я запускаю программу де я получаю ошибку сегментации, когда я называю «Foo». Помощь нужна срочно. заранее спасибо.

ответ

0

Вы имели в виду, что каждая запись в array_3D указывает на точный же массив 2D? Я предполагаю, что нет. (Но это не может быть причиной вашего Segfault.)

Ваш код не указывает, как xarr, yarr, nexp и naxes[...] получают свои значения. Если они не совпадают правильно - если, например, naxes[0] больше, чем yarr - тогда foo будет пытаться получить доступ к вещам в конце того, что вы выделили.

Функция foo использует i в качестве индекса в src_buffer, но i не определен. Если у вас есть глобальная переменная с именем i, пожалуйста, измените это значение прямо сейчас. Если он должен сказать ii, то, опять же, если naxes[0] больше 200, то вы напишете минус src_buffer.

Функция foo использует n как индекс в src_buffer, но n не определен. Если у вас есть глобальная переменная, называемая n, то, пожалуйста, измените ее. В противном случае, что должно быть n?

Смежные вопросы