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/05/2007, à 17:24

Agrou

Problème avec cURL dans un programme en C

Bonjour à tous,

Je cherche à utiliser la librairie cURL pour récupérer des informations contenues dans une page web. Grace à pacome (http://forum.ubuntu-fr.org/viewtopic.php?id=119157) j'arrive à mettre une page dans un buffer et après je peut récupérer les informations qui m'interressent.

Justement j'essaye de réutiliser une url qui m'est fournie sur une page afin de la "charger" dans mon buffer. Or il se trouve que quand j'utilise 2 fois curl dans mon programme et que je l'éxecute, je me retrouve avec une belle erreur de segmentation.

Voici un exemple qui produit la même erreur (mais qui est plus simple que mon programme )

#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
#include <string.h>

typedef char *pointeur; // touttes la variables du type pointeur pointent sur des chaines de caractères
pointeur ptrbuffer; // adresse du buffer qui contient la page web.
size_t tailletotale;// taille de la page.
int cpt; // compteur qui sert à vérifer combien de fois la fonction buffer est appelée.

size_t buffer(void *ptr, size_t size, size_t nmemb, void *stream)
{
size_t taille;
taille = size*nmemb;
tailletotale=tailletotale+taille;
cpt++;
if(cpt==1)
    {
    ptrbuffer=(char*)malloc(taille);
    }

    wmemcpy(ptrbuffer+tailletotale-taille,ptr,taille);
   
return taille;
}


void appel( pointeur url)
{
cpt=0;
tailletotale=0;
  CURL *handle;
    handle = curl_easy_init();
    curl_easy_setopt(handle, CURLOPT_URL, url);
    curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, buffer);
    curl_easy_perform(handle);
curl_easy_cleanup(handle);
}

int main(void)
{

appel("www.google.fr");
puts("google c'est fait");
appel("www.voila.fr");
puts("voila c'est fait");

}

Et l'erreur que j'obtient en executant :

./a.out
google c'est fait
Erreur de segmentation (core dumped)

C'est donc lors du second appel de cURL que l'erreur se produit et j'ai beau chercher dans la doc je ne trouve pas de solution.

J'espère que quelqu'un va pouvoir m'aider, je suis complètement débutant en programmation. Merci d'avance.


http://linuxdansmonpc.is-a-geek.com/

« Quoi que tu fasses cela sera insignifiant, mais il est très important que tu le fasses».  Mohandas Gandhi

Hors ligne

#2 Le 30/05/2007, à 14:47

Agrou

Re : Problème avec cURL dans un programme en C

up !   wink


http://linuxdansmonpc.is-a-geek.com/

« Quoi que tu fasses cela sera insignifiant, mais il est très important que tu le fasses».  Mohandas Gandhi

Hors ligne

#3 Le 30/05/2007, à 15:24

toto4455

Re : Problème avec cURL dans un programme en C

peut etre tu devrais t'inspirer des exemples de la documentation.

http://curl.haxx.se/lxr/source/docs/examples/getinmemory.c

#4 Le 05/07/2007, à 03:03

vo0do0

Re : Problème avec cURL dans un programme en C

J'ai lu en travers ton code, mais se qui mais déjà arrivé lors d'une erreur de segmentation, c'est l'oublie de libérer un pointeur.... et comme tu en a quelques-uns...:rolleyes:

j'ai rejeter un oeil dessus, c'est le "handle" qui semble avoir un soucis au deuxieme tour (problème d'allocation, liberation...) au niveau du init.

Hors ligne