Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 ... smile

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 ! hmm

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

D4miens a écrit :

Merci.

Je pense que c'est ca effectivement ... Un truc aussi "basique" m'etait passe sous le nez ! hmm

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à smile

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