我是C语言的新手,完全无法调试依赖CFITSIO软件包的程序(如果在下面使用错误的术语,请先抱歉。)。我正在阅读两个拟合:1.“ BFmask.fits”,2.“ DFmask.fits”。这是两个具有1或0作为元素的文件。
这些被定义为双精度指针,如下所示: 双* maskdark,* maskbright;
内存分配如下:
maskdark=malloc(size*sizeof(double)); //dark mask
maskbright=malloc(size*sizeof(double)); //bright mask
其中“ size”是一个长变量,值为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