我運行一個C代碼時發生錯誤,該代碼將計數數轉換爲衛星數據的亮度溫度。它給我分段錯誤。我在這裏粘貼我的代碼。任何人都可以告訴我代碼的問題在哪裏。C代碼的分段錯誤(核心轉儲)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N150 150
int main(int argc, char *argv[]){
int lon_tl=80, lat_tl=60;
int lon_br=200, lat_br=-60;
float lon_inc=0.04;
float lat_inc=0.04;
FILE *fp;
char outputfilename[N150];
float tmp_NX, tmp_NY;
int i, j, k, nk, NX, NY, tmp_count, count[N150];
short *data_all;
float *dt, tmp_tbb, tbb[N150];
if(argc!=2){
fprintf(stderr,"Usage: geoss2bt.c inputfilename1\n");
fprintf(stderr," e.g.: ./geoss2bt IMG_DK01IR1_200705010030.geoss\n");
exit(1);
}
tmp_NX=(lon_br-lon_tl)/lon_inc; tmp_NY=(lat_tl-lat_br)/lat_inc;
NX=(int)(tmp_NX); NY=(int)(tmp_NY);
data_all=(short*)malloc(2*NY*NX);
dt=(float*)malloc(4*NY*NX);
for(i=0;i<NY*NX;i++){
data_all[i]=-999;
dt[i]=-999.;
}
if((fp=fopen(argv[1],"r"))==NULL){
fprintf(stderr,"*** input file (%s) cannot open ***\n",argv[1]);
exit(1);
}
fread(data_all,sizeof(short),NY*NX,fp);
fclose(fp);
if((fp=fopen("tbbtable.txt","r"))==NULL){
fprintf(stderr,"*** TBB table (tbbtable.txt) cannot open ***\n");
exit(1);
}
k=0;
while(!feof(fp)){
fscanf(fp,"%d %f",&tmp_count, &tmp_tbb);
count[k]=tmp_count; tbb[k]=tmp_tbb;
k++;
}
nk=k;
fclose(fp);
for(i=0;i<NY;i++){
for(j=0;j<NX;j++){
if(data_all[NX*i+j]<count[0]){ dt[NX*i+j]=-999.; }
else if(data_all[NX*i+j]==count[0]) { dt[NX*i+j]=tbb[0]; }
else{
for(k=1;k<nk;k++){
if(data_all[NX*i+j]<=count[k]){
dt[NX*i+j]=tbb[k]-(tbb[k]-tbb[k-1])*(count[k]-data_all[NX*i+j])/(count[k]-count[k-1]);
goto LOOP;
}
}
}
LOOP:;
}
}
sprintf(outputfilename,"tbb_%s",argv[1]);
fp = fopen(outputfilename,"w");
fwrite(dt,sizeof(float),NX*NY,fp);
fclose(fp);
free(data_all); free(dt);
return 0;
}
什麼是輸入? –
在尋求幫助之前,您是否真的自己做過任何基本的調試。就像使用調試器和/或調試打印語句來跟蹤程序的執行一樣。調試器會告訴你究竟是哪一條線路導致啓動器發生故障。 – kaylum
你是否刻意地試圖讓你的代碼難以理解,可憐的縮進,沒有評論,一行上多個語句,標記之間缺少空格,非顯而易見和太相似的變量名等等? – kaylum