Я начинающий программист C и полностью застрял в отладке программы, использующей пакет CFITSIO [заранее извините, если я неправильно понял терминологию, приведенную ниже].У меня есть две подгонки, в которых я читаю: 1. "BFmask.fits", 2. "DFmask.fits".Это два файла, которые имеют элементы 1 или 0.
Они определены как указатели двойной точности, как показано ниже: double * maskdark, * maskbright;
Распределение памяти выглядит следующим образом:
maskdark=malloc(size*sizeof(double)); //dark mask
maskbright=malloc(size*sizeof(double)); //bright mask
, где «размер» - это длинная переменная со значением 490000
ПРОБЛЕМА: Когда я выполняю программу, онаочевидно, не правильно читает в BFmask.fits или DFmask.fits (то есть не правильно читает в записях для maskbright или maskdark).
ОДНАКО, когда я объявляю третью переменную с именем 'mask' (т.е. double * mask;), тогда программа ДЕЙСТВИТЕЛЬНО выполняется.
- Какова причина и решение этой проблемы?
- Как избежать подобных в будущем?
Я проверял десятки разчтобы убедиться, что эта переменная не используется нигде в программе.Это не имеет смысла для меня.
#include <stdio.h>
//For declaration of open, close
#include <sys/stat.h>
#include <fcntl.h>
#include <math.h>
#include <unistd.h>
#include <time.h>
//GSL Matrix STuff
#include <gsl/gsl_vector.h>
#include <gsl/gsl_math.h>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_eigen.h>
#include <gsl/gsl_blas.h>
//CFITSIO
#include <fitsio.h>
int main ()
{
long sizetotdm,cmwfsbrightindex,cmwfsdarkindex;
long size,sizex,sizey;
double *maskdark,*maskbright;
//double *mask; //if I uncomment this, then the program works properly somehow
fitsfile *fptr;
float nullval;
int status, anynull;
cmwfsbrightindex=0;
cmwfsdarkindex=0;
sizex=700; sizey=700; size=sizex*sizey;
/* Define Masks for Dark Field and Bright Field */
maskdark=malloc(size*sizeof(double)); //dark mask
maskbright=malloc(size*sizeof(double)); //bright mask
/* Read in Dark and Bright Field Mask files */
sprintf(s_file,"./06_21_19_mask/BFmask.fits");
fits_open_file(&fptr,s_file,READONLY,&status);
fits_read_img(fptr,TDOUBLE,1,size,&nullval,maskbright,&anynull,&status);
sprintf(s_file,"./06_21_19_mask/DFmask.fits");
fits_open_file(&fptr,s_file,READONLY,&status);
fits_read_img(fptr,TDOUBLE,1,size,&nullval,maskdark,&anynull,&status);
for (i=0;i<size; i++)
{
if (*(maskbright+i)==1)
{
cmwfsbrightindex+=1;
}
if (*(maskdark+i)==1)
{
cmwfsdarkindex+=1;
}
}
printf("the number of pixels is %ld %ld \n",cmwfsbrightindex,cmwfsdarkindex);
}
Результаты должны быть ...
the number of pixels is 24212 24952 //this happens when I define an unused variable
Результаты будут ...
the number of pixels is 0 0 //this happens when I comment out the unused variable