C: ошибка EXC_BAD_ACCESS - PullRequest
       1

C: ошибка EXC_BAD_ACCESS

0 голосов
/ 20 сентября 2011

Я пытаюсь запустить эту программу для извлечения некоторых данных, однако не могу заставить ее работать должным образом, так как у меня появляется ошибка: EXC_BAD_ACCESS.

Вот часть программы на C, где происходит ошибка:

* Строка, в которой происходит ошибка -

 if ( ( iend = oclread() ) == -1 ) printf(" END OF FILE REACHED\n");

который расположен внизу.

=============================================== =========================

define maxtax 30  
define maxsec 100  
define maxbio 50  
define maxparm 100  
define maxpsec 25 * maxparm  
define idim 360  
define jdim 180  
define kdim 33  
define kdimax 40  
define maxchoice 8

FILE *fp,*fpout,*fplist, *fpwoa;

char cc[2];

int icruise=0, ostation=0, year=0, month=0, day=0;

int hour,longitude,latitude;

int levels,isoor,nparm,ip2[maxparm],iperror[maxparm];  
int htotfig[3],hsigfig[3],hrightfig[3];

int origcfig,origsfig;
char origc[30],origs[30];
int ipip[maxparm],ipi[maxparm],npi;

int nsec;
int stotfig[maxsec],ssigfig[maxsec],srightfig[maxsec];
int seccode[maxsec],secval[maxsec];

int npsec;
int pstotfig[maxpsec],pssigfig[maxpsec],psrightfig[maxpsec];
int psecparm[maxpsec],pseccode[maxpsec],psecval[maxpsec];

int nbio;
int btotfig[maxbio],bsigfig[maxbio],brightfig[maxbio];
int biocode[maxbio],bioval[maxbio];

int ntsets;
int *ntloc,*ntcode,*ntval,*nterr,*ntoerr,*nttotfig,*ntsigfig,*ntrightfig;

int *depth,*zerr,*zoerr,*ztotfig,*zsigfig,*zrightfig;

int *dataval,*derr,*doerr,*dtotfig,*dsigfig,*drightfig;

int isize,zsize;
int ntsetsmax=0, isizemax=0,zsizemax=0;

double tenp[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000,
                  100000000 };

int sdepth[] = { 0, 10, 20, 30, 50, 75, 100, 125, 150, 200, 250,  
                 300, 400, 500, 600, 700, 800, 900, 1000, 1100,  
                 1200, 1300, 1400, 1500, 1750, 2000, 2500, 3000,  
                 3500, 4000, 4500, 5000, 5500, 6000, 6500, 7000,  
                 7500, 8000, 8500, 9000 }; 

 char *namevar[] = { "Temp","Sal","Oxy","Phos","dum5","Sil","dum7",  
                     "NO3","pH","dum10","Chl","dum12","dum13","dum14",  
                     "dum15","dum16","Alk","dum18","dum19","pCO2",  
                     "DIC","BAC","dum25","dum26","dum27","dum28",  
                     "dum29","dum30","dum31","dum32","Trit","He",  
                     "dHE3","dC14","dC13","Arg","Neo","CFC11",  
                     "CFC12","CFC113","O18" };  

  main()
  {
      char filename[80];
      int i=0, j, k, s, jchoice, iend=0;
      int ncast=0;

      printf(" Enter input file name\n");
      scanf("%s",filename);

      if ((fp = fopen(filename,"rb+\0")) == NULL)
      printf("UNABLE TO OPEN FILE\n");

      else {

            printf( "Which variable would you like to see:\n");  
            printf( " 1 - Temperature\n");  
            printf( " 2 - Salinity\n");  
            printf( " 3 - Oxygen\n");  
            printf( " 4 - Phosphate\n");  
            printf( " 6 - Silicate\n");  
            printf( " 8 - Nitrate\n");  
            printf( "11 - Chlorophyll\n");  
            printf( "17 - Alkalinity\n");  
            printf( "20 - pCO2\n");  
            printf( "21 - tCO2\n");  
            printf( "24 - BAC\n");  
            printf( "33 - Tritium\n");  
            printf( "34 - Helium\n");  
            printf( "35 - deltaHE3\n");  
            printf( "36 - deltaC14\n");  
            printf( "37 - deltaC13\n");  
            printf( "38 - Argon\n");  
            printf( "39 - Neon\n");  
            printf( "40 - CFC11\n");   
            printf( "41 - CFC12\n");  
            printf( "42 - CFC113\n");  
            printf( "43 - Oxy18\n");  
            scanf("%d",&jchoice);

/********************************************************

 INITIALIZE DYNAMIC ARRAYS

*********************************************************/

            spacer(1);

  /*   GET USER INFORMATION (NUMBER OF CASTS, OUTPUT FILE NAME) */

            printf(" Enter output file name\n");
            scanf("%s",filename);

            if ((fpout = fopen(filename,"w\0")) == NULL) 
               {
                 printf("UNABLE TO OPEN FILE\n");
               }

            printf(" ENTER NUMBER OF CASTS TO VIEW");
            printf (" (0 FOR ALL CASTS IN FILE)\n");
            if ( (s = scanf("%d",&ncast)) == 0 ) ncast=0;

            if ( ncast == 0 ) ncast=100000000;

/********************************************************

ENTER STANDARD LEVEL DEPTHS, IN CASE THIS IS STANDARD LEVEL DATA

********************************************************/

            for ( j = 0; j < 40; j++ ) *(depth+j)= *(sdepth+j);

            printheader(jchoice);

            while ( !feof(fp) && (i++) < ncast ) 
            {
             if ( ( iend = oclread() ) == -1 ) printf(" END OF FILE REACHED\n");

             else printstation(i,jchoice);
            }

      }

} 

ПОЖАЛУЙСТА, может кто-нибудь объяснить проблему, так как мне действительно нужно это сделать.

Спасибо

1 Ответ

0 голосов
/ 20 сентября 2011

Это связано с чтением данных из базы данных Мирового океана?

Если это так, здесь приведен пример использования oclread (): http://2bitbrain.blogspot.com/2010/08/sqlite3-and-world-ocean-database.html

Похоже, вам нужно #include заголовочный файл, который создает прототипы oclread (), и вызывать его с соответствующими параметрами, а именно WOD_Reader *, который вы создали и настроили.

Ваш текущий код компилируется и связывается без ошибок или предупреждений?

...