#1 Le 29/04/2008, à 14:46
- D4miens
Probleme avec la bibliotheque libsndfile
Voici le code que j'aimerais executer :
#include <stdio.h>
#include <sndfile.h>
#include <stdlib.h>
#include <errno.h>
#define FALSE 0
#define TRUE !FALSE
#define SAMPLE_SIZE 512
int main (void){
SNDFILE* pFile;
SF_INFO* info_wav;
sf_count_t nb_sample_ecrit;
info_wav->format = 0;
int *ptr;
int i;
printf("debut malloc\n");
ptr = (int*) malloc (2 * SAMPLE_SIZE);
for (i = 0; i < 2 * SAMPLE_SIZE; i++){
*(ptr + i) = i/2;
}
printf("malloc ok\n");
info_wav->format = SF_FORMAT_WAV;
info_wav->channels = 2;
info_wav->samplerate = 5512;
printf("debut ecriture\n");
nb_sample_ecrit = sf_write_int(pFile, ptr, SAMPLE_SIZE);
printf("fin ecriture\n");
if (nb_sample_ecrit != SAMPLE_SIZE){
printf("ERREUR");
return -1;
}
return 0;
}
L'erreur que j'obtiens se passe lors de l'ecriture (appel de la fonction sf_write_int).
Voici l'erreur : Erreur de segmentation (core dumped).
Je suppose que je me trompe de type de valeur que je passe pour le dernier argument de cette fonction.
J'ai essaye en rajoutant la taille de SF_INFO a la valeur de SAMPLE_SIZE (SAMPLE_SIZE + sizeof(SF_INFO)) mais ca ne marche pas non plus.
Qui plus est, je ne suis pas encore tres doue avec la ligne de commande et je ne trouve pas ou est defini sf_count_t qui est le type du troisieme argument qui doit etre passe a la fonction sf_write_int.
Voici les commandes que j'utilise pour compiler :
- gcc `pkg-config --cflags sndfile` -c TesT.c
- gcc `pkg-config --libs sndfile` TesT.o -o TesT
Mon fichier source s'appelle TesT.c et mon executable TesT evidemment ...
Pourriez-vous m'aider svp ?
Merci d'avance,
Damiens.
#2 Le 29/04/2008, à 16:23
- Chojin
Re : Probleme avec la bibliotheque libsndfile
Bon je te fais une petite réponse à chaud...
Premièrement je ne connais pas la librairie que tu utilises donc je te fais une réponse théorique.
En lisant ton code, quelque soit le résultat escompté, il me semble qu'il te manque le open de ton SNDFILE* avant de faire ton sf_write_int.
Et vraisemblablement il te manque le close aussi.
En cherchant deux minutes, j'ai trouvé ce lien http://www.mega-nerd.com/libsndfile/api.html qui, je l'espère, pourra t'aider.
Hors ligne
#3 Le 29/04/2008, à 20:48
- D4miens
Re : Probleme avec la bibliotheque libsndfile
Merci.
Je pense que c'est ca effectivement ... Un truc aussi "basique" m'etait passe sous le nez !
Enfin bon, j'essaie demain et je re-posterai si besoins est.
#4 Le 29/04/2008, à 22:36
- mrpouet
Re : Probleme avec la bibliotheque libsndfile
Merci.
Je pense que c'est ca effectivement ... Un truc aussi "basique" m'etait passe sous le nez !
Enfin bon, j'essaie demain et je re-posterai si besoins est.
Dejà commences pas include assert.h, et par te sertir de la fonction assert pour vérifier si le pointeur que te retournes la fonction malloc n'est pas NULL (si l'allocation échoue)
ptr = malloc (size);
assert (ptr != NULL);
si ptr est NULL assert te génère un coredumped provoqué par le signal SIGABRT (mais c'est normal) puisqu'il se sert de abort().
le coredumped arrive pendant la phase d'écriture car tout simplement parce que tu n'instancie pas ton objet SNDFILE réfèrencé par pFile, il doit avoir dans l'interface de la librairie que tu utilises une fonction prévue à cette effet, de plus comme tu n'initialises pas pFile il contient une valeur complètement aléatoire que tu passes par la suite à sf_write_int , donc comme le pointeur est != NULL tu n'as pas un segmentation fault simple mais bien un coredumped puisque il essayes d'écrire à une adresse à laquelle il n'est pas autorisé.
PS : penses également à libérer le pointeur ptr, sinon tu auras une fuite mémoire , voilà
Dernière modification par mrpouet (Le 29/04/2008, à 22:38)
"Le logiciel c'est comme le sexe, c'est mieux quand c'est libre..." Linus Torvalds
Hors ligne