Problème de malloc

Signaler
Messages postés
67
Date d'inscription
mardi 5 décembre 2000
Statut
Membre
Dernière intervention
5 juillet 2010
-
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
-
Bonjour,

Je ne comprends pas mon problème. Ca doit être un problème de réallocation

Voila mon code :

// Initialisation de fen_remontee de -2 à +2
int cpt = -2;
int demi_fen_remontee = 2 ;
unsigned int i_max ;

double * signal_fen;
pic_potentiels[nb_decomposition] = (unsigned long*) malloc( taille * sizeof( unsigned long) );
//signal_fen = (double*) malloc ( taille * sizeof(double) );



for(unsigned int i_ech = nb_decomposition - 1 ; i_ech > 0 ; i_ech--)
{

printf ( "Etude de l'echelle : %u " , i_ech ) ;
printf(" \n");
signal_fen = (double*) malloc ( tailles_ond[i_ech ] * sizeof(double) );

// On copie notre signal dans une variable temporaire
for( i = 0 ; i < tailles_ond[i_ech] ; i++)
{
//printf("%f \n", ond_d[i_ech][i]);
signal_fen[i] = abs(ond_d[i_ech][i]); // On récupère les valeurs de chaque décomposition et on prend la valeur absolue
}

// On rajoute les pic potentiels à la suite
for(unsigned int i_pic = 0 ; i_pic < nb_pics[i_ech] ;i_pic++)
{
pic_potentiels[nb_decomposition][ i_pic + nb_pics[nb_decomposition] ] = pic_potentiels[i_ech] [ i_pic ];
}
nb_pics[nb_decomposition] = nb_pics[nb_decomposition] + nb_pics[i_ech];


//pic_potentiels[nb_decomposition] = (unsigned long*)malloc( nb_pics[nb_decomposition] * sizeof(unsigned long) );

// On cherche le maximum sur notre intervalle
for(unsigned int i_pic = 0 ; i_pic < nb_pics[nb_decomposition] ; i_pic++)
{


pic_potentiels[nb_decomposition][i_pic] = pic_potentiels[nb_decomposition][i_pic]*2 ;
max( & ( signal_fen [ pic_potentiels[nb_decomposition][i_pic] - demi_fen_remontee ] ) , 2*demi_fen_remontee+1 , & i_max );
pic_potentiels[nb_decomposition][i_pic] = pic_potentiels[nb_decomposition][i_pic] - demi_fen_remontee + i_max ;
}

FILE * fic ;
fic = fopen ( "D:\\tmp\\decomposition.txt" , "w" ) ;
double * sig_pics = ( double * ) malloc ( tailles_ond[i_ech] * sizeof ( double ) ) ;
double v_min , v_max ;

v_min = min ( signal_fen , tailles_ond[i_ech], NULL ) ;
v_max = max ( signal_fen , tailles_ond[i_ech], NULL ) ;

for( j = 0 ; j < tailles_ond[i_ech] ; j++)
{
sig_pics [ j ] = v_min ;
//printf("%f \n" ,sig_pics [ j ]);
//fprintf ( fic , "%f \n" /*,signal_fen[j]*/ ,sig_pics [ j ] ) ;
}

for( j = 0 ; j < nb_pics[i_ech ] ; j++)
{
sig_pics [ pic_potentiels[nb_decomposition][j] ] = v_max ;
printf ( "%f\n" ,sig_pics [ pic_potentiels[nb_decomposition][j] ]) ;
}
printf ( "Taille = %u\n" , tailles_ond[i_ech] ) ;

for ( j = 0 ; j < tailles_ond[i_ech ] ; j++ )
{
//sig_pics [ j ] = v_min ;
//signal_fen [ j ] = v_min ;
printf("%f \n" ,signal_fen[j]);
printf("%f \n" ,sig_pics [j]);
//fprintf ( fic , " %f \n" ,signal_fen[j] ,sig_pics [j] ) ;
//fprintf ( fic , " %e \n" ,signal_fen[j] ) ;
}
fclose ( fic ) ;
free(signal_fen);
}
for(unsigned int i_pic = 0 ; i_pic < nb_pics[0] ;i_pic++)
{
pic_potentiels[ nb_decomposition ][ i_pic + nb_pics[nb_decomposition] ] = pic_potentiels[ 0] [ i_pic ];
}
nb_pics[nb_decomposition] = nb_pics[nb_decomposition] + nb_pics[0];



Je peux faire un tour de boucle.
J'arrive à afficher les valeurs signal_fen[j] et sig_pics [j] mais je ne peux pas faire un fprintf ( fic , " %f \n" ,signal_fen[j] ,sig_pics [j] ) ;

Il me dit :

Windows a déclenché un point d'arrêt dans StageM1.exe.

Cela peut être dû à une défaillance du tas qui indique un bogue dans StageM1.exe ou l'une des DLL chargées.

Cela peut également être dû à l'appui sur la touche F12 lorsque StageM1.exe a le focus.

La fenêtre Sortie peut contenir des informations de diagnostic supplémentaires.



La je vois vraiment pas
Aidez moi svp merci d'avance !!
Hésitez pas à poser des questions si vous ne comprenez pas mon problème

3 réponses

Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
Si tu peux me faire un exemple qui met en avant ton problème et qui compile, je peux t'aider à le débugger.

PS: Tu fais du C ou du C++ ? Je serais tenté de dire que tu fais du C. Dans ce cas, si tu as besoin de "caster" les retours de ton malloc, c'est que tu utilises un compilateur C++ pour faire du C (dev-c++ ?). Attention, certaines choses du C ne sont pas prises en charge par un compilateur C++ (ou pris différemment). Cette remarque n'a pas de rapport avec ton problème.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
67
Date d'inscription
mardi 5 décembre 2000
Statut
Membre
Dernière intervention
5 juillet 2010

En gros je peux faire ca :

printf("%f \n" ,signal_fen[j]);

Mais je ne peux pas faire ca :

fprintf(fic, "%f \n" ,signal_fen[j]);

L'initialisation de signal_fen est :

double * signal_fen;
signal_fen = (double*) malloc ( tailles_ond[i_ech ] * sizeof(double) );

Sachant que pour tailles_ond[ i_ech ] : On a
unsigned int * tailles_ond = (unsigned int*) malloc( nb_decomposition * sizeof(double) );

En fait on est sur une décomposition par ondelettes db4 et nb_decomposition correspond au nombre de fois ou l'on a décomposé le signal.

En fait je crois qu'il y a tout simplement une différence avec ca
pic_potentiels[nb_decomposition][i_pic] = pic_potentiels[nb_decomposition][i_pic] *2 ;

et ca

pic_potentiels[nb_decomposition][i_pic] = (pic_potentiels[nb_decomposition][i_pic]) *2 ;

C'est possible ?

PS: Je fais plutot du C et du C++ quand ca m'arrange. C'est peut être pas une bonne idée.
Je travaille sous VS 2010.
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113

pic_potentiels[nb_decomposition][i_pic] = pic_potentiels[nb_decomposition][i_pic] *2 ;
pic_potentiels[nb_decomposition][i_pic] = (pic_potentiels[nb_decomposition][i_pic]) *2 ;

Sont strictements identiques.

Sans code que je peux compiler, j'aurais du mal à t'aider à cerner l'erreur.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]