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

wxWidgets Discussion :

[wxwidgets][wxSocketBase][erreure de segmentation]


Sujet :

wxWidgets

  1. #1
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut [wxwidgets][wxSocketBase][erreure de segmentation]
    [edit] le vrai pb est donné dans la 4eme reponse [/edit]

    Bonjours, pour un programme que je dev, j'aurait besoin de transferrer de grosses données, je n'ai pas encore généré la partie permettant de generer ces gros fichier (2.4Mo au max).

    afin de m'entrainer en attendant, j'essaie de transferrer un fichier bitmap.
    hors, je bloque un peu sur la facon de proceder

    ce que je pense faire : envoyer une sorte de header qui contiendrat la taille du fichier a transferer... (je me fiche du nom, au final y'en aura pas...)

    je vous donne le bout de code (qui plante pour le moment)

    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
    	wxFile *myfile ;
    	myfile= new wxFile("./image/testImage.bmp");
    	off_t taille = myfile->Length(); //taille en octet :)
    	/* m'a servit a connaitre la grandeur renoyé par la fonction Lentgh()
    	wxString temp;
    	temp<<taille;
    	memoLog->AppendText( temp);
    	*/
    	int *buffer[taille] ; // on crée un buffer de la taille donnée par Length()
    	for (int i = 0; i < taille; i = i + 1024) 
    	{
    	 	myfile->Read(buffer, 1024);
    	 	socketImgCli->Write(&taille, 1024);
    	}
    	myfile->Read(buffer, 1024);
    	socketImgCli->Write(&taille, 1024);
    j'avait aussi essayé de proceder ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	myfile->Read(buffer, taille);//on copie dans buffer le fichier
     
    	//on encvoie la taille, puis les données
    	socketImgCli->Write(&taille, 4);
    	//on envoie donc les données
    	socketImgCli->WriteMsg(buffer, taille);
    le deux font planter windows... (machin a generé une erreure et sera fermé)
    mais ca passe a la compilation...

    mon pb etant que je ne sait pas d'avance de quelle taille sera mon fichier.
    si mon header fait une taille de 4, c'est que l'entier que j'envoie est sur 4 octets d'apres la doc que j'ai lut...

    meme si je n'envoie que le "header" de la seconde solution ca plante...

    ps : ce ne sont pas mes sockets qui sont en cause, je pense, car des echanges de données ont deja eu lieu a ce niveau...

    voila

  2. #2
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    alors, j'en suis la :
    l'envoie d'une var de type "off_t" me fait planter le PC.
    par contre, l'envoir d'un "int"/"char" marche...

    le plantage se fait a la fin... => socketImgCli->Write(&temp, 4); => plantage

    j'ai essayé pas mal de bidouilles, mais je ne voit pas comment proceder...

    la derniere ligne du code en exemple est la ligne du plantage

    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
    	wxFile *myfile ;
    	myfile= new wxFile("./image/testImage.bmp");
    	off_t taille = myfile->Length(); //taille en octet :)
     
    	/* m'a servit a connaitre la grandeur renoyé par la fonction Lentgh() 
       wxString temp; 
       temp<<taille; 
       memoLog->AppendText( temp); 
       */ 
    	//on envoie la taille totale du fichier qui va suivre :
    	sockBaseImg->SetNotify(wxSOCKET_LOST_FLAG | wxSOCKET_INPUT_FLAG);
    	char *buffer[8192] ; // on crée un buffer de 8192
    	off_t i = 0;
    	wxString temp; 
       	temp<<taille; 
    	//envoie de la taille totale du fichier, un off_t est ocdé sur 32 bit => 4 octets
     	memoLog->AppendText("Envoie de la taille du fichier : ");
    	memoLog->AppendText(temp);
    	memoLog->AppendText("\n\n");
     	socketImgCli->Write(&temp, 4);

  3. #3
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    j'ai essayé aussi de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	wxFile *myfile ;
    	myfile= new wxFile("./image/testImage.bmp");
    	off_t taille = myfile->Length(); //taille en octet :)	//envoie de la taille totale du fichier, un off_t est ocdé sur 32 bit => 4 octets
    	wxUint32 tempBis;
    	tempBis = taille;
     	socketImgCli->Write(&tempBis, 4);
    mais ca ne marche pas non plus...

    j'aimerais bien savoir ou est l'erreure...
    en effet, dans l'aide de l'api, le type a donner est :
    wxSocketBase& Write(const void * buffer, wxUint32 nbytes)
    hors mon premier parametre est codé sur 32 bit, donc mon pb peut venir de la, mais ils n'en parlent pas...
    comment puis-je faire?
    je ne sait pas comment recuperer 4 octets sur 4 * 1 octet... j'ai regardé du coté des operateurs bit a bit, masi j'ai pas trouvé ma solution...

  4. #4
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    j'ai l'erreure suivante au debogage :
    Citation Envoyé par le deboggeur
    "une violation d'acces (erreure de segemtation) est apparue dans votre programme"

  5. #5
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    comment cela se fait il que j'ai cette erreure, qui , d'apres me recherchent vient du fait que j'accede a dess zones memoire non allouée, etant donné que j''envoie juste une variable, initialisée, qui plus est?

  6. #6
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    honte a moi!!
    n'etait pas le bon objet!

    dsl!

Discussions similaires

  1. WxWidgets Erreur de segmentation
    Par l'unique dans le forum Débuter
    Réponses: 2
    Dernier message: 06/02/2011, 11h43
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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