Oppure

Loading
16/01/09 15:31
kyu2t
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..
#include <mathlink.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <time.h>
double Sys_x(double angle, double a, double b, double d, double c);
double Sys_y(double angle, double a, double b, double d, double c);
int rotor(double a, double b, double d);
int main()
{
    double var1;
    double var2;
    double var3;
    double index;
    int check=0;
    FILE *fp;
    double i,j,k;
    
    do
    {
       index=40000000;
       var1=sqrt(-1);
       var2=sqrt(-1);
       var3=sqrt(-1);
       for(i=0;i<index;i=i+(1/1000000))
       {
        for(j=0;j<index;j=j+(1/1000000))
        {
         for(k=0;k<index;k=k+(1/1000000))
         {
          check=rotor(var1,var2,var3);
          if(check==1)
          {
           if ((fp = fopen("rotor", "a+")) ==NULL)
           {  
              printf("Error opening file\n");
              exit(1);
           } 
           else
           {
               fprintf(fp,"%f",var1);
               fprintf(fp,"||");
               fprintf(fp,"%f",var2);
               fprintf(fp,"||");
               fprintf(fp,"%f",var3);
               fprintf(fp,"\n");
           }
           fclose(fp);
          }
         }
        }
       }
    }while(check==1);
    printf("execution done\n");
    getch();
    return(0);    
}
int rotor(double a,double b,double d)
{
	int n;
	double c=0;
	double angle= -(3.14159265358979/6);
	double x[100000];
	double y[100000];
	double z[100000][2];
	int err;
	if((a>b)&&(a+b>sqrt((c*c)+(d*d))))
	   {
       n=0;
       for(n=0;n<100000;n++)
                          {
                           angle= angle+0.00001047;
                           x[n]=Sys_x(angle,a,b,c,d);
                           y[n]=Sys_y(angle,a,b,c,d);        
                                                       }
       err=0;
       n=0;
       do{
          n=n+1;
          if(x[n]== sqrt(-1))
                        err=1;
          if(y[n]== sqrt(-1))
                        err=1;
          }while((err==0)&&(n<100000));
       if(err==0)
                 {
                 angle= -(3.14159265358979/6);
                 for(n=0;n<1000000;n++)
                                     {
                                     z[n][0]=sqrt((x[n]*x[n]) + (y[n]*y[n]));
                                     z[n][1]=angle + 0.00001047;   
                                     printf("FIND1!!!\n");
                                                      }
                                    }
                 return(1);
       }
       else
           {
           printf("DOH!!!\n");
           return(0);
                                    }
}
aaa
19/01/09 6:03
pierotofy
Cioè, tu hai provato a compilare ed eseguire questo sorgente

#include <mathlink.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <time.h>

int main()
{ 
 printf("OK!");
 return 0;
}


E ti da errore di segmentazione?
Il mio blog: piero.dev
20/01/09 10:22
kyu2t
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 20/01/09 13:12
aaa
20/01/09 14:00
gioser


#include <mathlink.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <time.h>
double Sys_x(double angle, double a, double b, double d, double c);
double Sys_y(double angle, double a, double b, double d, double c);
int rotor(double a, double b, double d);
int main()
{
    double var1;
    double var2;
    double var3;
    double index;
    int check=0;
    FILE *fp;
    double i,j,k;

/*    
    do
    {
       index=40000000;
       var1=sqrt(-1);
       var2=sqrt(-1);
       var3=sqrt(-1);
       for(i=0;i<index;i=i+(1/1000000))
       {
        for(j=0;j<index;j=j+(1/1000000))
        {
         for(k=0;k<index;k=k+(1/1000000))
         {
          check=rotor(var1,var2,var3);
          if(check==1)
          {
           if ((fp = fopen("rotor", "a+")) ==NULL)
           {  
              printf("Error opening file\n");
              exit(1);
           } 
           else
           {
               fprintf(fp,"%f",var1);
               fprintf(fp,"||");
               fprintf(fp,"%f",var2);
               fprintf(fp,"||");
               fprintf(fp,"%f",var3);
               fprintf(fp,"\n");
           }
           fclose(fp);
          }
         }
        }
       }
    }while(check==1);
*/
    printf("execution done\n");
    getch();
    return(0);    
}
int rotor(double a,double b,double d)
{
	int n;
	double c=0;
	double angle= -(3.14159265358979/6);
	double x[100000];
	double y[100000];
	double z[100000][2];
	int err;
	if((a>b)&&(a+b>sqrt((c*c)+(d*d))))
	   {
       n=0;
       for(n=0;n<100000;n++)
                          {
                           angle= angle+0.00001047;
                           x[n]=Sys_x(angle,a,b,c,d);
                           y[n]=Sys_y(angle,a,b,c,d);        
                                                       }
       err=0;
       n=0;
       do{
          n=n+1;
          if(x[n]== sqrt(-1))
                        err=1;
          if(y[n]== sqrt(-1))
                        err=1;
          }while((err==0)&&(n<100000));
       if(err==0)
                 {
                 angle= -(3.14159265358979/6);
                 for(n=0;n<1000000;n++)
                                     {
                                     z[n][0]=sqrt((x[n]*x[n]) + (y[n]*y[n]));
                                     z[n][1]=angle + 0.00001047;   
                                     printf("FIND1!!!\n");
                                                      }
                                    }
                 return(1);
       }
       else
           {
           printf("DOH!!!\n");
           return(0);
                                    }
}


e compilando questo?
Ultima modifica effettuata da gioser 20/01/09 14:01
aaa
22/01/09 8:25
kyu2t
Postato originariamente da gioser:



#include <mathlink.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <time.h>
double Sys_x(double angle, double a, double b, double d, double c);
double Sys_y(double angle, double a, double b, double d, double c);
int rotor(double a, double b, double d);
int main()
{
    double var1;
    double var2;
    double var3;
    double index;
    int check=0;
    FILE *fp;
    double i,j,k;

/*    
    do
    {
       index=40000000;
       var1=sqrt(-1);
       var2=sqrt(-1);
       var3=sqrt(-1);
       for(i=0;i<index;i=i+(1/1000000))
       {
        for(j=0;j<index;j=j+(1/1000000))
        {
         for(k=0;k<index;k=k+(1/1000000))
         {
          check=rotor(var1,var2,var3);
          if(check==1)
          {
           if ((fp = fopen("rotor", "a+")) ==NULL)
           {  
              printf("Error opening file\n");
              exit(1);
           } 
           else
           {
               fprintf(fp,"%f",var1);
               fprintf(fp,"||");
               fprintf(fp,"%f",var2);
               fprintf(fp,"||");
               fprintf(fp,"%f",var3);
               fprintf(fp,"\n");
           }
           fclose(fp);
          }
         }
        }
       }
    }while(check==1);
*/
    printf("execution done\n");
    getch();
    return(0);    
}
int rotor(double a,double b,double d)
{
	int n;
	double c=0;
	double angle= -(3.14159265358979/6);
	double x[100000];
	double y[100000];
	double z[100000][2];
	int err;
	if((a>b)&&(a+b>sqrt((c*c)+(d*d))))
	   {
       n=0;
       for(n=0;n<100000;n++)
                          {
                           angle= angle+0.00001047;
                           x[n]=Sys_x(angle,a,b,c,d);
                           y[n]=Sys_y(angle,a,b,c,d);        
                                                       }
       err=0;
       n=0;
       do{
          n=n+1;
          if(x[n]== sqrt(-1))
                        err=1;
          if(y[n]== sqrt(-1))
                        err=1;
          }while((err==0)&&(n<100000));
       if(err==0)
                 {
                 angle= -(3.14159265358979/6);
                 for(n=0;n<1000000;n++)
                                     {
                                     z[n][0]=sqrt((x[n]*x[n]) + (y[n]*y[n]));
                                     z[n][1]=angle + 0.00001047;   
                                     printf("FIND1!!!\n");
                                                      }
                                    }
                 return(1);
       }
       else
           {
           printf("DOH!!!\n");
           return(0);
                                    }
}


e compilando questo?

questo codice funziona, quindi il problema dovrebbe essere dentro lo spazio non eseguito... forse variabili troppo grandi?
aaa
22/01/09 13:54
iGuLy
Postato originariamente da kyu2t:

Postato originariamente da gioser:



#include <mathlink.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <time.h>
double Sys_x(double angle, double a, double b, double d, double c);
double Sys_y(double angle, double a, double b, double d, double c);
int rotor(double a, double b, double d);
int main()
{
    double var1;
    double var2;
    double var3;
    double index;
    int check=0;
    FILE *fp;
    double i,j,k;

/*    
    do
    {
       index=40000000;
       var1=sqrt(-1);
       var2=sqrt(-1);
       var3=sqrt(-1);
       for(i=0;i<index;i=i+(1/1000000))
       {
        for(j=0;j<index;j=j+(1/1000000))
        {
         for(k=0;k<index;k=k+(1/1000000))
         {
          check=rotor(var1,var2,var3);
          if(check==1)
          {
           if ((fp = fopen("rotor", "a+")) ==NULL)
           {  
              printf("Error opening file\n");
              exit(1);
           } 
           else
           {
               fprintf(fp,"%f",var1);
               fprintf(fp,"||");
               fprintf(fp,"%f",var2);
               fprintf(fp,"||");
               fprintf(fp,"%f",var3);
               fprintf(fp,"\n");
           }
           fclose(fp);
          }
         }
        }
       }
    }while(check==1);
*/
    printf("execution done\n");
    getch();
    return(0);    
}
int rotor(double a,double b,double d)
{
	int n;
	double c=0;
	double angle= -(3.14159265358979/6);
	double x[100000];
	double y[100000];
	double z[100000][2];
	int err;
	if((a>b)&&(a+b>sqrt((c*c)+(d*d))))
	   {
       n=0;
       for(n=0;n<100000;n++)
                          {
                           angle= angle+0.00001047;
                           x[n]=Sys_x(angle,a,b,c,d);
                           y[n]=Sys_y(angle,a,b,c,d);        
                                                       }
       err=0;
       n=0;
       do{
          n=n+1;
          if(x[n]== sqrt(-1))
                        err=1;
          if(y[n]== sqrt(-1))
                        err=1;
          }while((err==0)&&(n<100000));
       if(err==0)
                 {
                 angle= -(3.14159265358979/6);
                 for(n=0;n<1000000;n++)
                                     {
                                     z[n][0]=sqrt((x[n]*x[n]) + (y[n]*y[n]));
                                     z[n][1]=angle + 0.00001047;   
                                     printf("FIND1!!!\n");
                                                      }
                                    }
                 return(1);
       }
       else
           {
           printf("DOH!!!\n");
           return(0);
                                    }
}


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.
aaa
22/01/09 14:25
gioser
ovvio mica tanto, visto quello che ha scritto nel primo post..

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. ;)
aaa
23/01/09 17:45
iGuLy
Postato originariamente da gioser:

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

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.
aaa