IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

erreur d'allocation de mémoire?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Par défaut erreur d'allocation de mémoire?
    j'ai donc alloué ma mémoire, à la compilation ca passe mais le problème est qu'au lancement de l'executable ça veux ecrire ou lire dans des endroits non alloué et je vois pas trop où j'aurai pu faire une bourde.
    Donc il y a t'il une erreur dans ma syntaxe?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    void main()
    {
        Donneewav *D=(Donneewav*)malloc(sizeof(Donneewav));
    	char* name=(char*)malloc(7*sizeof(char));
    	double** tri,*y,** data_trame,*E;
    	int i,j,TRAME,DEC,NB_TR,tempo,tempo2,SCAL_DELTA,SCAL_ACC;
    	D->file_type=(char*) malloc(4*sizeof(char));
        D->file_id=(char*) malloc(4*sizeof(char));			
        D->chunk_id=(char*) malloc(4*sizeof(char));
        D->chunk2_id=(char*) malloc(4*sizeof(char));
    	D->data=(double*)malloc(25000*sizeof(double));
    	tri = (double**)malloc(NUMCHANS* sizeof(double*));
    	for(i=0;i<NUMCHANS;i++)
    		tri[i] =(double*) calloc (Lfft/2, sizeof(double));
        y =(double*)malloc (Lfft* sizeof(double));
     
    	sprintf(name,"busarri");
        wavread(name,D);															
     
    	TRAME=D->sampling_freq*25/1000;												
    	DEC=D->sampling_freq*10/1000;												
    	NB_TR=(int)(((D->chunk3_size)-(TRAME-DEC))/DEC);							
    	SCAL_DELTA=0;
    	for (i=1;i<DELTA+1;i++)
    		SCAL_DELTA=i^2+SCAL_DELTA;												
    	SCAL_ACC=0;
    	for (i=1;i<ACC+1;i++)
    		SCAL_ACC=i^2+SCAL_ACC;													/
     
    	filt_mel(tri,D);															
     
    	data_trame = (double**)malloc(NB_TR* sizeof(double*));
    	for(i=0;i<NB_TR;i++)
    		data_trame[i] =(double*) calloc (Lfft, sizeof(double));
     
    	trame(D,data_trame,TRAME,DEC,NB_TR);						
     
    	E=(double*)malloc(NB_TR*sizeof(double));
    	tempo2=0;	
     
    	for(i=0;i<NB_TR;i++)
    	{
    		E[i]=0;
    		for(j=0;j<TRAME;j++)
    		{
    			E[i]=E[i]+pow(data_trame[i][j],2);									
     
    			tempo=data_trame[i][j];
    			data_trame[i][j]=data_trame[i][j]-0.97*tempo2;
    			tempo2=tempo;
    			data_trame[i][j]=data_trame[i][j]*(0.54-0.46*cos(2*Pi*j/(TRAME-1)));
    		}
            E[i]=log(E[i]);
    		fft(data_trame[i],y);
     
    	}
     
     
    	free(E);
    	E=NULL;
    	for(i=0;i<NB_TR;i++)
    	{
    		free(data_trame[i]);
    		data_trame[i]=NULL;
    	}
        free(data_trame);
    	data_trame=NULL;
    	free(y);
    	for(i=0;i<NUMCHANS;i++)
    	{
    		free(tri[i]);
    		tri[i]=NULL;
    	}
    	free(tri);
    	tri=NULL;
    	free(D->data);
    	D->data=NULL;
    	free(name);
    	name=NULL;
    	free(D->file_type);
    	D->file_type=NULL;
        free(D->file_id);
    	D->file_id=NULL;
        free(D->chunk_id);
    	D->chunk_id=NULL;
        free(D->chunk2_id);
    	D->chunk2_id=NULL;
        free(D);
    	D=NULL;
    }

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut,
    1) teste le retour de malloc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(mon_pointeur==NULL)
    {
      perror("Erreur");
      exit(EXIT_FAILURE);
    }
    2) enlève tous les cast avant le malloc : ils ne servent à rien

    3) le prototype de main est

    4) rajoute un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return EXIT_SUCCESS;
    tout à la fin de ton main (car la fonction renvoie un int)

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TRAME=D->sampling_freq*25/1000;												
    	DEC=D->sampling_freq*10/1000;
    qu'est-ce que D->sampling_freq ? un int ou un double ?

    en entier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    25/1000 == 0
    10/1000 == 0
    je ne sais pas si l'opération 25/1000 est effectuée en premier puis le résultat est multiplié par D->sampling_freq (auquel cas le résultat sera 0) ou si la 1e opération est D->sampling_freq * 25 puis le résultat est divisé par 1000. Je ne sais pas s'il y a une optimisation du compilo...

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Ôte donc ces casts que je ne saurais voir!
    Le cast du retour de malloc() est inutile en C, et parfois nuisible car il peut cacher un oubli d'inclusion de stdlib.h.

    Et comme dit plus haut, teste les valeurs retournées.
    Je te conseille aussi de décomposer un peu plus ton code en fonctions.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Par défaut
    il n'y a pas de soucis pour D->sampling_freq, il vaut 8000

    j'ai testé tous mes pointeurs sur mon programme mais j'ai préféré tout enlevé pour allégé.

    mais j'ai de grosse crainte sur le fait que ma fonction fft() puisse me désaloué mes pointeurs sans que je lui demande :/

    EDIT: et il manquait la library stdlib.h mais ça ne résout pas mon problème

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par ulnar

    mais j'ai de grosse crainte sur le fait que ma fonction fft() puisse me désaloué mes pointeurs sans que je lui demande
    salut, désaloué == faire un free ? as-tu fait un free() dans la fonction fft() ? Poste la.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for (i=1;i<DELTA+1;i++)
    		SCAL_DELTA=i^2+SCAL_DELTA;
    qu'est-ce que le ^ ?? pour faire un carré, soit tu fais i*i, soit tu fais pow(i,2.)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Par défaut
    Citation Envoyé par salseropom
    salut, désaloué == faire un free ? as-tu fait un free() dans la fonction fft() ? Poste la.
    la fonction fft() fait un free mais comme c'est un code repris que je ne contrôle pas... normalement ça devrai pas avoir d'incidence mais ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void fft(double* x,double* X)
    {	
    	IppStatus status;
    	IppsFFTSpec_R_64f* spec;
    	status= ippsFFTInitAlloc_R_64f(&spec,8,IPP_FFT_DIV_INV_BY_N,ippAlgHintNone);
    	status=ippsFFTFwd_RToCCS_64f(x,X,spec,NULL);
    	ippsMagnitude_64fc((Ipp64fc*)X,X,Lfft/2);
    	ippsFFTFree_R_64f(spec);
    }
    comme je disais, je doute que ca aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur d'allocation mémoire
    Par Sagee dans le forum Débuter
    Réponses: 5
    Dernier message: 18/04/2012, 12h03
  2. Erreur d'allocation mémoire - GTK+
    Par Jazzero dans le forum Débuter
    Réponses: 13
    Dernier message: 13/07/2009, 18h33
  3. C++, erreur d'allocation dynamique de mémoire
    Par YuGiOhJCJ dans le forum C++
    Réponses: 8
    Dernier message: 20/02/2009, 11h51
  4. Double allocation de mémoire
    Par hunter001 dans le forum C++
    Réponses: 16
    Dernier message: 25/08/2005, 13h53
  5. pb d'allocation de mémoire
    Par shura dans le forum C
    Réponses: 7
    Dernier message: 17/04/2005, 21h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo