Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C] Errore di segmentazione (core dump creato)

    Salve ragazzi =) volevo chiedervi se potreste aiutarmi a capire perchè il seguente ciclo mi da


    codice:
    Errore di segmentazione (core dump creato)
    codice:
     do{
     	if(option==0){        	
     		printf("scegli l'angolo d'inclinazione (deg)\n");
     		scanf("%lf",&Theta);
     		pf=open_file("ValoreOttimale.dat","w");
     	}
     	
     	i=0;
     	
     	Start_Condition(TotalTime,dt,argv,&P,Theta);
     	while(P.y>=0){
     		i++;
           	RK2(&P,dt,A); 
         }
      					                                                        /*Range of motion*/
         if(P.x>Max_Range){									/*Find MaxRange*/
      		Max_Range=P.x;
      		Max_Theta=P.angle;
      	}
       	if(Theta<=THETA_MAX && option==1){ Theta=Theta+dTheta;}
       }while(Theta<=THETA_MAX && option==1);
    nel caso in cui vi sia utile, provvedo a inserire l'intero codice. Comunque mi fa compilare, ma da anche un risultato, ma prima di uscire mi lascia appunto questo messaggio


    codice:
    Errore di segmentazione (core dump creato)
    why?
    "I don't know anything, but I do know that everything is interesting if you go into it deeply enough."(Richard P. Feynman)

    “Don’t waste time living someone else’s life. Stay hungry. Stay Foolish” (Steve Jobs)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E' sicuramente il valore sbagliato di un puntatore ma è difficile dirlo senza fare un po' di debugging.

    Hai individuato esattamente dopo quale linea viene evidenziato l'errore? Ad esempio, ti sembra che sia dopo che il ciclo che hai evidenziato termina o durante l'esecuzione del ciclo?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510

    Re: [C] Errore di segmentazione (core dump creato)

    Originariamente inviato da xavier310
    nel caso in cui vi sia utile, provvedo a inserire l'intero codice. Comunque mi fa compilare, ma da anche un risultato, ma prima di uscire mi lascia appunto questo messaggio
    Certo che serve altro codice, usi funzioni che non sappiamo come sono fatte, posta tutto.

  4. #4
    Mi da la scritta una volta uscito dal ciclo, perchè ho inserito alcuni printf() dopo il ciclo e me li stampa. Comunque anche se me lo da dopo, non può riguardare ugualmente il ciclo?
    "I don't know anything, but I do know that everything is interesting if you go into it deeply enough."(Richard P. Feynman)

    “Don’t waste time living someone else’s life. Stay hungry. Stay Foolish” (Steve Jobs)

  5. #5
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    #define g 9.81
    #define PI 3.14159
    #define THETA_MAX 3.14159/2.
    
    struct variables {
      double x,y,v,vx,vy,angle;
    };
    
    int choice();
    
    double AccelX(struct variables * p_P,double A);
    double AccelY(struct variables * p_P,double A);
    
    void RK2(struct variables * p_P, double dt,double A);
    void Start_Condition(int TotalTime,int dt,char *argv[],struct variables * p_P,double Theta);
    
    FILE * open_file (  char * path , const char * mode );
    
    /*******************************************************************************************************************/
    
    int main(int argc, char *argv[]) {
      int  i=0, option=0;
      double TotalTime, dt,Theta=0,dTheta, A,Max_Range=0,Max_Theta;
      struct variables P;
      FILE *fp,*pf;
     
      system("clear");
    
      if (argc != 6) {
        fprintf(stderr,"\n usage:   <x0> <y0> <v0> <TotalTime> <dt> \n");
        exit(1);
      }
      
      TotalTime = atof(argv[4]);
      dt = atof(argv[5]);
     
      printf("#Trattiamo il problema del moto bidimensionale di una grave trascurando l'attrito\n\n");
      
    /*--------------------------------------------------------------------------------------------------------*/
    /*--------------------------------------------------------------------------------------------------------*/
    
      printf("Scegli il coeffiziente di attrito:");
      scanf("%lf",&A);
      printf("#[Digita 0] Analisi del moto del proiettile scegliendo l'angolo d'inclinazione\n");
      printf("#[Digita 1] Massima gittata\n");
      option=choice();
     
      if(A==0) fp=open_file("A=0.dat","w");
      if(A==0.1)fp=open_file("A=0,1.dat","w");
      if(A==1)fp=open_file("A=1.dat","w");
      
      printf("Inserisci dTheta (deg): ");
      scanf("%lf",&dTheta);
      Theta=dTheta;
      
      double a ,b;
      do{
     	if(option==0){        	
     		printf("scegli l'angolo d'inclinazione (deg)\n");
     		scanf("%lf",&Theta);
     		pf=open_file("ValoreOttimale.dat","w");
     	}
     	i=0;
     	Start_Condition(TotalTime,dt,argv,&P,Theta);
     	while(P.y>=0){
     		i++;
               	a=P.y;
            	RK2(&P,dt,A); 
         	        b=P.y;
          //	printf("%lf\n",b-a);
              }
                                                                    					/*Range of motion*/
         if(P.x>Max_Range){									/*Find MaxRange*/
      		Max_Range=P.x;
      		Max_Theta=P.angle;
      	}
       	if(Theta<=THETA_MAX && option==1){ Theta=Theta+dTheta;}
    
       }while(Theta<=THETA_MAX && option==1);
       
      printf("\n\n%lf\t%lf\n",Max_Range,Max_Theta);
      
       fclose(fp);
       fclose(pf);
    
       exit(0);
    }
    
    /*******************************************************************************************************************/
    
    
    FILE * open_file (  char * path , const char * mode ){
    FILE * fa ;
    if ( ( fa = fopen ( path , mode ) ) == NULL ){
    fprintf(stderr,"\n Errore in apertura di %s\n" , path ) ;
    exit ( EXIT_FAILURE ) ;
    }
    return fa ;
    }
    
    
    /*******************************************************************************************************************/
    int choice(){
    int option;
     do{
       printf("scegli opzione\n");
       scanf("%d",&option);
       if(option<0 || option>1) printf("Error! Rinserisci il valore\n");
     }while(option<0 || option>1) ;
     return option;
    }
    
    /*******************************************************************************************************************/
    
    double AccelX(struct variables * p_P,double A) {
    	return -A*p_P->vx*sqrt(p_P->vx*p_P->vx+p_P->vy*p_P->vy);
    }
    
    double AccelY(struct variables * p_P,double A) {
         return -g-A*p_P->vy*sqrt(p_P->vx*p_P->vx+p_P->vy*p_P->vy);
         
    }
    /*******************************************************************************************************************/
    
    void Start_Condition(int TotalTime,int dt,char *argv[],struct variables * p_P,double Theta){
    
      p_P->x = atof(argv[1]);
      p_P->y = atof(argv[2]);
      p_P->v= atof(argv[3]);
      p_P->angle=Theta;
      p_P->vx=p_P->v*cos(p_P->angle);
      p_P->vy=p_P->v*sin(p_P->angle);
    
    }
    
    
    void RK2(struct variables * p_P, double dt, double A) {
      struct variables tmp;
      
      tmp.x = p_P->x + 0.5 * p_P->vx * dt;
      tmp.y = p_P->y + 0.5 * p_P->vy * dt;
      	
      tmp.vx = p_P->vx + 0.5 * AccelX(p_P,A) * dt;
      tmp.vy = p_P->vy + 0.5 * AccelY(p_P,A) * dt;
      
      p_P->x += tmp.vx * dt;
      p_P->y += tmp.vy * dt;
      
      p_P->vx += AccelX(&tmp,A) * dt;
      p_P->vy += AccelY(&tmp,A) * dt;
      
      }
    "I don't know anything, but I do know that everything is interesting if you go into it deeply enough."(Richard P. Feynman)

    “Don’t waste time living someone else’s life. Stay hungry. Stay Foolish” (Steve Jobs)

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da xavier310
    Comunque anche se me lo da dopo, non può riguardare ugualmente il ciclo?
    Certo ... potrebbe ... ma tutte le indicazioni sono utili.

    Come hai usato il programma, ovvero quali dati hai fornito sulla linea di comando per ottenere il problema?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Sai la riga esatta dove avviene l' errore?

  8. #8
    Sai la riga esatta dove avviene l' errore?
    Non non so la riga esatta perchè, quando vado per eseguire il programma mi da

    codice:
    saverio@saverio-SATELLITE-L735:~/Scrivania/E_NEW$ 
    saverio@saverio-SATELLITE-L735:~/Scrivania/E_NEW$ ./EsoneroNew.exe 0 100 20 10000 0.001
    
    #Trattiamo il problema del moto bidimensionale di una grave trascurando l'attrito
    
    Scegli il coeffiziente di attrito:0
    #[Digita 0] Analisi del moto del proiettile scegliendo l'angolo d'inclinazione
    #[Digita 1] Massima gittata
    scegli opzione
    1
    Inserisci dTheta (deg): 0.01
    
    
    99.094757	0.390000
    Errore di segmentazione (core dump creato)
    saverio@saverio-SATELLITE-L735:~/Scrivania/E_NEW$ ^C
    saverio@saverio-SATELLITE-L735:~/Scrivania/E_NEW$
    e volevo capire a cosa era dovuto:

    codice:
    Errore di segmentazione (core dump creato)
    Girando anche sul forum, a quanto ho capito, può essere che in qualche ciclo impongo qualche condizioni per cui tenta di leggere una variabile ma io glielo impedisco. E' un'ipotesi probabile?
    "I don't know anything, but I do know that everything is interesting if you go into it deeply enough."(Richard P. Feynman)

    “Don’t waste time living someone else’s life. Stay hungry. Stay Foolish” (Steve Jobs)

  9. #9
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se option !=0, chiudi pf senza mai averlo aperto e dato che non è NULL hai il problema.
    Che poi: lo apri quanto option == 0 e non lo usi mai.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il problema è in

    fclose(pf);

    Se non apri il file, pf non è valido e non devi chiamare la fclose.


    P.S. coefficiente non coeffiziente
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.