[Please Help!!!] Erreur de Segmentation !!!!

Erreur de Segmentation !!!! [Please Help!!!] - C - Programmation

Marsh Posté le 05-05-2004 à 20:57:41    

Coucou tt le monde !!
 
g une erreur de segmentation juste avant le check point 6. Je vois pas du tout a quoi c du !!
 
Si qqun pouvait m'aider, ca serait ultra giga over mega COOOOOL :D
 
Voila le fichier incremin�:)

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "tfd.h"
  4. #include <math.h>
  5. int tfd2d(double **x,double **xtre,double **xtim,int Width, int Height)
  6. {
  7.   long i,j;
  8.   double *x_re=NULL, *x_im=NULL;
  9.   int max;
  10.   x_re=malloc(max*sizeof(double));
  11.   x_im=malloc(max*sizeof(double));
  12.   /* if (x_re==NULL || x_im==NULL){
  13.      printf("pfffffffffffffffffffffffffffffffffffffffffffffffff\n" );
  14.      return EXIT_FAILURE;
  15.      }*/
  16.   printf("check point 1\n" );
  17.   if (Width>=Height) {
  18.     printf("check point 2\n" );
  19.     max=Width;
  20.     printf("check point 3 max = %d\n", max);
  21.   }
  22.   else {
  23.     printf("check point 4\n" );
  24.     max = Height;
  25.     printf("check point 5 max = %d\n", max);
  26.   }
  27.   printf("check point 6" );
  28.   max = Height;
  29.   printf("max=%d",max);
  30.   printf("check point 7" );
  31.   //transform� des lignes
  32.   for(i=0;i<Height;i++){
  33.     for(j=0;j<Width;j++){
  34.       x_re[j]=x[i][j];
  35.       x_im[j]=0;
  36.       tfd(x_re,x_im,Width,Height);
  37.     }
  38.   }
  39.   //transform� des colonnes
  40.   for(j=0;j<Width;j++){
  41.     for(i=0;i<Height;i++){
  42.       tfd(x_re,x_im,Height,Width);
  43.     }
  44.   }
  45.   return EXIT_SUCCESS;
  46. }


Reply

Marsh Posté le 05-05-2004 à 20:57:41   

Reply

Marsh Posté le 06-05-2004 à 04:51:48    

Je cherche même pas a comprendre, ton programme c'est du grand n'importe quoi. En vrac et entre autre :

  • Tu fais les malloc(max * ...) avant que max ait été initialisé
  • Tu commences par mettre max au max de Width et Height, puis tu l'initialise inconditionellement à Height juste après
  • Tu ne met pas de \n a la fin de tes printfs, et tu ne flush pas non plus stdout
  • Super les 15 printfs pour debugger une fonction de 10 lignes à la base... Apprend a utiliser un debugger

Bref ça plante surement dans ta boucle, mais vu que tu flush pas tes printfs (ou plutôt que tu n'a pas de \n) les 6 et 7 ne sont pas affichés avant le segfault. Pour conclure, comme tu apprends manifestement à programmer, n'oublie pas d'apprendre en même temps à debugger.


Message édité par matafan le 06-05-2004 à 04:53:20
Reply

Marsh Posté le 06-05-2004 à 08:55:42    

jebedia82 a écrit :


 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "tfd.h"
  4. #include <math.h>
  5. int tfd2d(double **x,double **xtre,double **xtim,int Width, int Height)
  6. {
  7.   long i,j;
  8.   double *x_re=NULL, *x_im=NULL;
  9.   int max;
  10.   if (Width>=Height) {
  11.     max=Width;
  12.   }
  13.   else {
  14.     max = Height;
  15.   }
  16.   x_re=malloc(max*sizeof(double));
  17.   x_im=malloc(max*sizeof(double));
  18.   //transform? des lignes
  19.   for(i=0;i<Height;i++){
  20.     for(j=0;j<Width;j++){
  21.       x_re[j]=x[i][j];
  22.       x_im[j]=0;
  23.       tfd(x_re,x_im,Width,Height);
  24.     }
  25.   }
  26.   //transform? des colonnes
  27.   for(j=0;j<Width;j++){
  28.     for(i=0;i<Height;i++){
  29.       tfd(x_re,x_im,Height,Width);
  30.     }
  31.   }
  32.   return EXIT_SUCCESS;
  33. }



Reply

Marsh Posté le 06-05-2004 à 13:01:29    

Oui oui, mon code etait degueu, je sais.  
C juste que je ne sais pas me servir correctement d'un debuggeur, donc g preferé faire comme ca...
 
Maintenant, il est tt bo :)
 
Sinon, en fait, qd je compile avec le main, il me met que les arguments sont incompatibles lors de l'appel de la fonction tfd2d :(
 
G essayé plein de truc et ca marche toujours pas. je me demande si c pas a cause de la déclaration des tableaux t,r et s (oui, les noms sont pourris, je compte les changer un jour :D).
 
 
ps : Pour le deboggeur, g ete voir sur qques sites, mais je vois pas comment je peux m'en servir, dans ce cas là, pour m'aider à comprendre mon erreur :(
 
 
Voila mon main.
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include "tfd2d.h"
  5. int main(){
  6.   long i,j,k,l;
  7.   double t[10][10];
  8.   double r[10][10];
  9.   double s[10][10];
  10.   for(i=0;i<10;i++){
  11.     for(j=0;j<10;j++){
  12.       t[i][j]=i+j;
  13.       r[i][j]=0;
  14.       s[i][j]=0;
  15.       printf("image t[%ld][%ld] %f\n",i,j,t[i][j]);
  16.     }
  17.   }
  18.   tfd2d(t,r,s,10,10);
  19.  
  20.   for (k=0;k<10;k++){
  21.     for(l=0;l<10;l++)
  22.       printf("valeur reelle %f\t valeur imaginaire %f\n",r[k][l],s[k][l]);
  23.   }
  24.  
  25.   return (1);
  26. }

Reply

Marsh Posté le 06-05-2004 à 14:13:35    

double T[x][y] c'est pas un double** bourdel ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed