Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - il simpatico errore di segmentazione...
Forum - C/C++ - il simpatico errore di segmentazione...

Avatar
kyu2t (Normal User)
Newbie


Messaggi: 4
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 16:31
Venerdì, 16/01/2009
salve, come sempre il magico errore di segmenttazione colpisce ancora, sono due giorni che tento di far partire un programmino.. ma niente. mi da tale errore appena entro nel main, senza nemmeno aspettare che dichiari qualche variabile, e per me è molto strano, poichè non ha fatto assolutamente nulla oltre che caricare qualche libreria.

ad ogni modo vi posto il sorgente, se c'è qualcuno che mi possa dare una mano a sbrogliare questo broblema..
Codice sorgente - presumibilmente C

  1. #include <mathlink.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <math.h>
  6. #include <time.h>
  7. double Sys_x(double angle, double a, double b, double d, double c);
  8. double Sys_y(double angle, double a, double b, double d, double c);
  9. int rotor(double a, double b, double d);
  10. int main()
  11. {
  12.     double var1;
  13.     double var2;
  14.     double var3;
  15.     double index;
  16.     int check=0;
  17.     FILE *fp;
  18.     double i,j,k;
  19.    
  20.     do
  21.     {
  22.        index=40000000;
  23.        var1=sqrt(-1);
  24.        var2=sqrt(-1);
  25.        var3=sqrt(-1);
  26.        for(i=0;i<index;i=i+(1/1000000))
  27.        {
  28.         for(j=0;j<index;j=j+(1/1000000))
  29.         {
  30.          for(k=0;k<index;k=k+(1/1000000))
  31.          {
  32.           check=rotor(var1,var2,var3);
  33.           if(check==1)
  34.           {
  35.            if ((fp = fopen("rotor", "a+")) ==NULL)
  36.            {  
  37.               printf("Error opening file\n");
  38.               exit(1);
  39.            }
  40.            else
  41.            {
  42.                fprintf(fp,"%f",var1);
  43.                fprintf(fp,"||");
  44.                fprintf(fp,"%f",var2);
  45.                fprintf(fp,"||");
  46.                fprintf(fp,"%f",var3);
  47.                fprintf(fp,"\n");
  48.            }
  49.            fclose(fp);
  50.           }
  51.          }
  52.         }
  53.        }
  54.     }while(check==1);
  55.     printf("execution done\n");
  56.     getch();
  57.     return(0);    
  58. }
  59. int rotor(double a,double b,double d)
  60. {
  61.         int n;
  62.         double c=0;
  63.         double angle= -(3.14159265358979/6);
  64.         double x[100000];
  65.         double y[100000];
  66.         double z[100000][2];
  67.         int err;
  68.         if((a>b)&&(a+b>sqrt((c*c)+(d*d))))
  69.            {
  70.        n=0;
  71.        for(n=0;n<100000;n++)
  72.                           {
  73.                            angle= angle+0.00001047;
  74.                            x[n]=Sys_x(angle,a,b,c,d);
  75.                            y[n]=Sys_y(angle,a,b,c,d);        
  76.                                                        }
  77.        err=0;
  78.        n=0;
  79.        do{
  80.           n=n+1;
  81.           if(x[n]== sqrt(-1))
  82.                         err=1;
  83.           if(y[n]== sqrt(-1))
  84.                         err=1;
  85.           }while((err==0)&&(n<100000));
  86.        if(err==0)
  87.                  {
  88.                  angle= -(3.14159265358979/6);
  89.                  for(n=0;n<1000000;n++)
  90.                                      {
  91.                                      z[n][0]=sqrt((x[n]*x[n]) + (y[n]*y[n]));
  92.                                      z[n][1]=angle + 0.00001047;  
  93.                                      printf("FIND1!!!\n");
  94.                                                       }
  95.                                     }
  96.                  return(1);
  97.        }
  98.        else
  99.            {
  100.            printf("DOH!!!\n");
  101.            return(0);
  102.                                     }
  103. }


PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 7:03
Lunedì, 19/01/2009
Cioè, tu hai provato a compilare ed eseguire questo sorgente

Codice sorgente - presumibilmente C++

  1. #include <mathlink.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <math.h>
  6. #include <time.h>
  7.  
  8. int main()
  9. {
  10.  printf("OK!");
  11.  return 0;
  12. }



E ti da errore di segmentazione?


Il mio blog: https://piero.dev
PM Quote
Avatar
kyu2t (Normal User)
Newbie


Messaggi: 4
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 11:22
Martedì, 20/01/2009
no, con quel codice non mi da nessun errore di segmentazione.. è possibile che il puntatore al file fada a toccare qualche parte di memoria che non dovrebbe? oppure sono numeri troppo grandi per la variabile double.. oltre a queste due ipotesi non mi viene in mente nulla..

Ultima modifica effettuata da kyu2t il 20/01/2009 alle 14:12
PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 15:00
Martedì, 20/01/2009


Codice sorgente - presumibilmente C

  1. #include <mathlink.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <math.h>
  6. #include <time.h>
  7. double Sys_x(double angle, double a, double b, double d, double c);
  8. double Sys_y(double angle, double a, double b, double d, double c);
  9. int rotor(double a, double b, double d);
  10. int main()
  11. {
  12.     double var1;
  13.     double var2;
  14.     double var3;
  15.     double index;
  16.     int check=0;
  17.     FILE *fp;
  18.     double i,j,k;
  19.  
  20. /*    
  21.     do
  22.     {
  23.        index=40000000;
  24.        var1=sqrt(-1);
  25.        var2=sqrt(-1);
  26.        var3=sqrt(-1);
  27.        for(i=0;i<index;i=i+(1/1000000))
  28.        {
  29.         for(j=0;j<index;j=j+(1/1000000))
  30.         {
  31.          for(k=0;k<index;k=k+(1/1000000))
  32.          {
  33.           check=rotor(var1,var2,var3);
  34.           if(check==1)
  35.           {
  36.            if ((fp = fopen("rotor", "a+")) ==NULL)
  37.            {  
  38.               printf("Error opening file\n");
  39.               exit(1);
  40.            }
  41.            else
  42.            {
  43.                fprintf(fp,"%f",var1);
  44.                fprintf(fp,"||");
  45.                fprintf(fp,"%f",var2);
  46.                fprintf(fp,"||");
  47.                fprintf(fp,"%f",var3);
  48.                fprintf(fp,"\n");
  49.            }
  50.            fclose(fp);
  51.           }
  52.          }
  53.         }
  54.        }
  55.     }while(check==1);
  56. */
  57.     printf("execution done\n");
  58.     getch();
  59.     return(0);    
  60. }
  61. int rotor(double a,double b,double d)
  62. {
  63.         int n;
  64.         double c=0;
  65.         double angle= -(3.14159265358979/6);
  66.         double x[100000];
  67.         double y[100000];
  68.         double z[100000][2];
  69.         int err;
  70.         if((a>b)&&(a+b>sqrt((c*c)+(d*d))))
  71.            {
  72.        n=0;
  73.        for(n=0;n<100000;n++)
  74.                           {
  75.                            angle= angle+0.00001047;
  76.                            x[n]=Sys_x(angle,a,b,c,d);
  77.                            y[n]=Sys_y(angle,a,b,c,d);        
  78.                                                        }
  79.        err=0;
  80.        n=0;
  81.        do{
  82.           n=n+1;
  83.           if(x[n]== sqrt(-1))
  84.                         err=1;
  85.           if(y[n]== sqrt(-1))
  86.                         err=1;
  87.           }while((err==0)&&(n<100000));
  88.        if(err==0)
  89.                  {
  90.                  angle= -(3.14159265358979/6);
  91.                  for(n=0;n<1000000;n++)
  92.                                      {
  93.                                      z[n][0]=sqrt((x[n]*x[n]) + (y[n]*y[n]));
  94.                                      z[n][1]=angle + 0.00001047;  
  95.                                      printf("FIND1!!!\n");
  96.                                                       }
  97.                                     }
  98.                  return(1);
  99.        }
  100.        else
  101.            {
  102.            printf("DOH!!!\n");
  103.            return(0);
  104.                                     }
  105. }



e compilando questo?

Ultima modifica effettuata da gioser il 20/01/2009 alle 15:01
PM Quote
Avatar
kyu2t (Normal User)
Newbie


Messaggi: 4
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 9:25
Giovedì, 22/01/2009
Testo quotato

Postato originariamente da gioser:



Codice sorgente - presumibilmente C

  1. #include <mathlink.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <math.h>
  6. #include <time.h>
  7. double Sys_x(double angle, double a, double b, double d, double c);
  8. double Sys_y(double angle, double a, double b, double d, double c);
  9. int rotor(double a, double b, double d);
  10. int main()
  11. {
  12.     double var1;
  13.     double var2;
  14.     double var3;
  15.     double index;
  16.     int check=0;
  17.     FILE *fp;
  18.     double i,j,k;
  19.  
  20. /*    
  21.     do
  22.     {
  23.        index=40000000;
  24.        var1=sqrt(-1);
  25.        var2=sqrt(-1);
  26.        var3=sqrt(-1);
  27.        for(i=0;i<index;i=i+(1/1000000))
  28.        {
  29.         for(j=0;j<index;j=j+(1/1000000))
  30.         {
  31.          for(k=0;k<index;k=k+(1/1000000))
  32.          {
  33.           check=rotor(var1,var2,var3);
  34.           if(check==1)
  35.           {
  36.            if ((fp = fopen("rotor", "a+")) ==NULL)
  37.            {  
  38.               printf("Error opening file\n");
  39.               exit(1);
  40.            }
  41.            else
  42.            {
  43.                fprintf(fp,"%f",var1);
  44.                fprintf(fp,"||");
  45.                fprintf(fp,"%f",var2);
  46.                fprintf(fp,"||");
  47.                fprintf(fp,"%f",var3);
  48.                fprintf(fp,"\n");
  49.            }
  50.            fclose(fp);
  51.           }
  52.          }
  53.         }
  54.        }
  55.     }while(check==1);
  56. */
  57.     printf("execution done\n");
  58.     getch();
  59.     return(0);    
  60. }
  61. int rotor(double a,double b,double d)
  62. {
  63.         int n;
  64.         double c=0;
  65.         double angle= -(3.14159265358979/6);
  66.         double x[100000];
  67.         double y[100000];
  68.         double z[100000][2];
  69.         int err;
  70.         if((a>b)&&(a+b>sqrt((c*c)+(d*d))))
  71.            {
  72.        n=0;
  73.        for(n=0;n<100000;n++)
  74.                           {
  75.                            angle= angle+0.00001047;
  76.                            x[n]=Sys_x(angle,a,b,c,d);
  77.                            y[n]=Sys_y(angle,a,b,c,d);        
  78.                                                        }
  79.        err=0;
  80.        n=0;
  81.        do{
  82.           n=n+1;
  83.           if(x[n]== sqrt(-1))
  84.                         err=1;
  85.           if(y[n]== sqrt(-1))
  86.                         err=1;
  87.           }while((err==0)&&(n<100000));
  88.        if(err==0)
  89.                  {
  90.                  angle= -(3.14159265358979/6);
  91.                  for(n=0;n<1000000;n++)
  92.                                      {
  93.                                      z[n][0]=sqrt((x[n]*x[n]) + (y[n]*y[n]));
  94.                                      z[n][1]=angle + 0.00001047;  
  95.                                      printf("FIND1!!!\n");
  96.                                                       }
  97.                                     }
  98.                  return(1);
  99.        }
  100.        else
  101.            {
  102.            printf("DOH!!!\n");
  103.            return(0);
  104.                                     }
  105. }



e compilando questo?


questo codice funziona, quindi il problema dovrebbe essere dentro lo spazio non eseguito... forse variabili troppo grandi?

PM Quote
Avatar
iGuLy (Ex-Member)
Pro


Messaggi: 66
Iscritto: 17/05/2007

Segnala al moderatore
Postato alle 14:54
Giovedì, 22/01/2009
Testo quotato

Postato originariamente da kyu2t:

Testo quotato

Postato originariamente da gioser:



Codice sorgente - presumibilmente C

  1. #include <mathlink.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <math.h>
  6. #include <time.h>
  7. double Sys_x(double angle, double a, double b, double d, double c);
  8. double Sys_y(double angle, double a, double b, double d, double c);
  9. int rotor(double a, double b, double d);
  10. int main()
  11. {
  12.     double var1;
  13.     double var2;
  14.     double var3;
  15.     double index;
  16.     int check=0;
  17.     FILE *fp;
  18.     double i,j,k;
  19.  
  20. /*    
  21.     do
  22.     {
  23.        index=40000000;
  24.        var1=sqrt(-1);
  25.        var2=sqrt(-1);
  26.        var3=sqrt(-1);
  27.        for(i=0;i<index;i=i+(1/1000000))
  28.        {
  29.         for(j=0;j<index;j=j+(1/1000000))
  30.         {
  31.          for(k=0;k<index;k=k+(1/1000000))
  32.          {
  33.           check=rotor(var1,var2,var3);
  34.           if(check==1)
  35.           {
  36.            if ((fp = fopen("rotor", "a+")) ==NULL)
  37.            {  
  38.               printf("Error opening file\n");
  39.               exit(1);
  40.            }
  41.            else
  42.            {
  43.                fprintf(fp,"%f",var1);
  44.                fprintf(fp,"||");
  45.                fprintf(fp,"%f",var2);
  46.                fprintf(fp,"||");
  47.                fprintf(fp,"%f",var3);
  48.                fprintf(fp,"\n");
  49.            }
  50.            fclose(fp);
  51.           }
  52.          }
  53.         }
  54.        }
  55.     }while(check==1);
  56. */
  57.     printf("execution done\n");
  58.     getch();
  59.     return(0);    
  60. }
  61. int rotor(double a,double b,double d)
  62. {
  63.         int n;
  64.         double c=0;
  65.         double angle= -(3.14159265358979/6);
  66.         double x[100000];
  67.         double y[100000];
  68.         double z[100000][2];
  69.         int err;
  70.         if((a>b)&&(a+b>sqrt((c*c)+(d*d))))
  71.            {
  72.        n=0;
  73.        for(n=0;n<100000;n++)
  74.                           {
  75.                            angle= angle+0.00001047;
  76.                            x[n]=Sys_x(angle,a,b,c,d);
  77.                            y[n]=Sys_y(angle,a,b,c,d);        
  78.                                                        }
  79.        err=0;
  80.        n=0;
  81.        do{
  82.           n=n+1;
  83.           if(x[n]== sqrt(-1))
  84.                         err=1;
  85.           if(y[n]== sqrt(-1))
  86.                         err=1;
  87.           }while((err==0)&&(n<100000));
  88.        if(err==0)
  89.                  {
  90.                  angle= -(3.14159265358979/6);
  91.                  for(n=0;n<1000000;n++)
  92.                                      {
  93.                                      z[n][0]=sqrt((x[n]*x[n]) + (y[n]*y[n]));
  94.                                      z[n][1]=angle + 0.00001047;  
  95.                                      printf("FIND1!!!\n");
  96.                                                       }
  97.                                     }
  98.                  return(1);
  99.        }
  100.        else
  101.            {
  102.            printf("DOH!!!\n");
  103.            return(0);
  104.                                     }
  105. }



e compilando questo?


questo codice funziona, quindi il problema dovrebbe essere dentro lo spazio non eseguito... forse variabili troppo grandi?


Ovvio che funziona c'è solo una printf nel main.

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 15:25
Giovedì, 22/01/2009
ovvio mica tanto, visto quello che ha scritto nel primo post..

Testo quotato

Postato originariamente da kyu2t:
ma niente. mi da tale errore appena entro nel main, senza nemmeno aspettare che dichiari qualche variabile, e per me è molto strano, poichè non ha fatto assolutamente nulla oltre che caricare qualche libreria.



per capire di che si tratta puoi proseguire con la tecnica che ho usato: di commentare parte del codice e vedere se si schianta. ;)

PM Quote
Avatar
iGuLy (Ex-Member)
Pro


Messaggi: 66
Iscritto: 17/05/2007

Segnala al moderatore
Postato alle 18:45
Venerdì, 23/01/2009
Testo quotato

Postato originariamente da gioser:

ovvio mica tanto, visto quello che ha scritto nel primo post..

Testo quotato

Postato originariamente da kyu2t:
ma niente. mi da tale errore appena entro nel main, senza nemmeno aspettare che dichiari qualche variabile, e per me è molto strano, poichè non ha fatto assolutamente nulla oltre che caricare qualche libreria.



per capire di che si tratta puoi proseguire con la tecnica che ho usato: di commentare parte del codice e vedere se si schianta. ;)


Si però se lasci solo una printf non so quanto possa essere utile questa tecnica. Piuttosto dovrebbe provare a parte anche le altre funzioni e vedere i vari casi.

PM Quote
Avatar
kyu2t (Normal User)
Newbie


Messaggi: 4
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 13:17
Sabato, 24/01/2009
piccolo aggiornamento... il codice l'ho risolto, ora funziona, ma c'è ancora un problema da risolvere che forse non riguarda il codice: mettendo tutte le variabili a float il codice funziona tranquillamente, ma se le cambio e le imposto tutte come bouble si blocca e da l'errore di segmentazione.. essendo che a me la precisione di un float non basta gran che, non è che c'è un modo per aggirare queso problema? devo forse allocare memoria manualmente con malloc?

PM Quote