c - C 代码的段错误(核心已转储)

标签 c segmentation-fault

<分区>

当我运行 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;
}

最佳答案

在代码的最后,你写:

fopen(outputfilename,"w");
fwrite(dt,sizeof(float),NX*NY,fp);
fclose(fp);

我认为应该是:

fp = fopen(outputfilename,"w");
fwrite(dt,sizeof(float),NX*NY,fp);
fclose(fp);

但是,您的代码很容易出错:

不要犹豫,评论你的代码,它永远不会无用。

关于c - C 代码的段错误(核心已转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39384116/

相关文章:

linux - Python 的 C 扩展中的 SIGSEGV

android - 在由 Android 应用程序链接的 native 库中调试崩溃的最简单方法?

c++ - 使用析构函数时 Qt 程序中的奇怪行为

c - EOF 上的段错误 while 在 c 中循环

c - 读取包含单词的 txt 文件的行

c - 在 C 中对数组中的值进行排序

c - 进度 4L SET-SIZE 语句和 C - malloc

c - PIC32MZ 上的 Microchip Harmony 时序问题

objective-c - Objective c, Scanf() 字符串两次取同一个值

c++ - Qt 和 C++ : app crashes only in debug mode