n° 219
Novembre 2017
Dicembre 13, 2017, 05:00:51 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: segmentation fault core dumped  (Letto 2713 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
emi111
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 1


Mostra profilo
« inserita:: Giugno 19, 2012, 10:52:53 »

Sto scrivendo un programma che prende in input un file di grandi dimensioni e cra un array di articoli,dove articolo e una struttura che contiene il titolo e altri dati che mi servono piu tardi.Non so perche mi da segmentation fault e come risolvere

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
typedef unsigned char byte;
void ERR(char * msg){
fprintf(stderr,"%s\n",msg);
exit(2);
}
typedef struct{
  char * key;
  char * title;
  int comp;
} article;
typedef struct{
  char * nome;
  int nr_art;
  article ** articoli;
}author;
int n_max=10;
article *A;
byte ** beg;
byte ** f;


/*byte *text;*/
/*A=(article *)malloc(sizeof(article)*n_max);*/

void trova_article(article *u){
  int j=0;
 
    while(strncmp((char *)*beg,"article",strlen("article"))!=0||strncmp((char *)*beg,"<dblp>",6)!=0){
    *beg=*beg+1;
    }
    if(strncmp((char *)*beg,"article",strlen("article"))==0){
    while(strncmp((char *)*beg,"key",strlen("key"))!=0){
     *beg=*beg+1;
    }
    *beg=*beg+5;
  * f=*beg;
    while(strncmp((char *)*beg,">",strlen(">"))!=0){
     *beg=*beg+1;
      j++;
    }
    (*u).key=(char *)malloc(sizeof(char)*(j-1));
    strncpy((*u).key,(char *)*f,j-1);
    (*u).comp=0;
    while(strncmp((char *)*beg,"<title>",strlen("<title>"))!=0){
      *beg=*beg+1;
    }
    *beg=*beg+7;
    *f=*beg;
    j=0;
    while(strncmp((char *)*beg,"</title>",strlen("</title>"))!=0){
     *beg=*beg+1;
      j++;
    }
    (*u).title=(char *)malloc(sizeof(char)*j);
    strncpy((*u).title,(char *)*f,j);
    }
}
    void leggi_articoli(){
  int i=0;
  while(strncmp((char *)*beg,"<dblp>",6)!=0){
  if(i==n_max-1){
    A=realloc(A,sizeof(article)*2*n_max);
  n_max*=2;
}
  trova_article(&(A[i]));
  i++;
 * beg++;
  }
  A=realloc(A,sizeof(article)*i);
 
}


 
   
int main(int argc,char **argv){
  int n,k;
  byte *text;
  FILE *fd;
  
  struct stat stat_buffer;
  /* article *A;*/
  
  /* aprire il file in lettura e scrittura*/
  fd=fopen(argv[1],"r+w");
  if (fd==NULL)
    ERR("errore di apertura file");

  /*lunghezza del file in byte*/
  if(fstat(fileno(fd),&stat_buffer)==-1)
    ERR("errore in fstat");
  n=stat_buffer.st_size;

  /*mmap per associare text all'intero file in fd */
  text=(byte *)mmap(NULL,n,PROT_READ|PROT_WRITE,MAP_SHARED,fileno(fd),0);
  if(text==NULL)
    ERR("errore in mmap");
  /*crea l'array A dei articoli ordinati in senso crescente*/
  beg=&(text+6);
  A=(article *)malloc(sizeof(article)*n_max);
  leggi_articoli();
   fclose(fd);
  return 0;
}
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines