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

Réseau C Discussion :

erreur allocation memoire


Sujet :

Réseau C

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Mars 2014
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Mars 2014
    Messages : 158
    Points : 465
    Points
    465
    Par défaut erreur allocation memoire
    Bonjour,

    je me retrouve avec une erreur étrange :

    j'ai un malloc incorrect, et la variable qui est passée à malloc contient pourtant bien un int.

    lors de mes test ceci arrive à chaque fois que j'envoie un buffer README :
    la taille de size(afficher par le printf("size Drecv :%u",*size)) est de 7 ce qui est normal (README\0)

    mais lors du malloc j'ai une memory corruption ...
    je pense peut être à l’ordre des bits sur le réseau mais la fonction transférè plusieurs fichiers plusieurs fichier sans problème et correctement ( il s'agit d'un serveur de fichier que j’essaie de faire ).
    ou alors à une fuite mémoire qui prendrais toute la ram et bloquerais l’exécution du malloc (mais bon je transférè de petit fichier pas de quoi mangé 2Go de ram)

    voila le code :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    /** \brief envois de la taille du buffer et du buffer sur le socket
     * \param buffer a envoyer
     * \param socket sur lequel envoyer
     * \return void
     */
     
     static void Dsend(const void * buffer, SOCKET sock,int size){
        int res=0,err=0;
        if(send(sock,&size,sizeof(int),0)<0){
            perror("send()");
            exit(errno);
        }
        if(recv(sock,&res,sizeof(int),0)<0){
            perror("recv()");
            exit(errno);
        }
        #ifdef DEBUG_ENVOIE
        printf("size: %u\n",size);
        #endif // DEBUG_ENVOIE
        if(res==size){
                err=1;
                if(send(sock,&err,sizeof(int),0)<0){
                perror("send()");
                exit(errno);
            }
            if(send(sock,buffer,size,0)<0){
                perror("send()");
                exit(errno);
            }
        }
        else{
            err=33;
            if(send(sock,&err,sizeof(int),0)<0){
                perror("send()");
                exit(errno);
            }
        }
    }
     
    /** \brief reception des infos envoyer par Dsend
     *
     * \param buffer a remplir
     * \param socket client sur lequel ecouter
     * \return taille du buffer
     */
    static void * Drecv(SOCKET csock,int *size){
        int res=0;
        void *data=NULL;
        if(recv(csock, size,sizeof(int),0)<0){
           perror("recv()");
           exit(errno);
        }
        printf("size Drecv:%u\n",*size);
        if(send(csock,size,sizeof(int),0)<0){
            perror("send()");
            exit(errno);
        }
        if(recv(csock, &res,sizeof(int),0)<0){
           perror("recv()");
           exit(errno);
        }
        if(res==1)
        {
            data=malloc(*size);
            if(recv(csock, data,*size,0)<0){
               perror("recv()");
               exit(errno);
            }
        }
        return data;
    }
    quelle solution vous semble là plus probable?

    Merci d'avance,
    Cordialement Tagashy.
    P.S je suis ouvert à tous conseil sur mon code
    P.P.S pour ceux qui aurais suivie mon post sur fopen non corect l'erreur arrive lors de la réception du nom du fichier

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Mars 2014
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Mars 2014
    Messages : 158
    Points : 465
    Points
    465
    Par défaut
    après des recherches et des tests je me suis rendue compte que le "readme" n'est absolument pas le problème
    le problème survient à chaque fois que je remonte d'un dossier : explication
    le serveur reçoit deux choix : 1 et 2
    1 correspond à la réception d'un fichier
    2 correspond à la réception d'un dossier ( et de ..)

    lors de l’envoie d'un dossier le client utilise une fonction qui lit récursivement le dossier, pour chaque fichier trouvé elle envoie 1 puis le fichier , pour chaque dossier trouvé elle se rappelle dans le dossier trouvé et envoie 2 puis le nom du dossier au serveur une fois qu'il n'y as plus de fichier la fonction envoie .. au serveur

    du coté serveur il attend un signal (1 ou 2) et effectue l'action demander
    1 il reçoit le fichier (taille du fichier, nom du fichier, puis le corp)
    2 il reçoit le nom d'un dossier et se déplace dedans, si .. est reçu il vérifie qu'il ne se trouve pas déjà dans le dossier racine des transfert (j'ai essayer de faire plus ou moins l’équivalent d'un chroot)

    or mon problème se situe lors de l'envoie du .. le serveur le reçoit bien effectue correctement les vérifications se déplace dans le bon dossier mais la arrive le drame :
    il reçoit un fichier la taille est reçu correctement (du moins je n'est pas d'erreur dessus) puis le nom du fichier la taille du nom est correctement afficher par printf mais le malloc qui le suit lui pars en memory corruption

    j’espère que l'algorithme est clair et que cela vous aideras à comprendre mon problème, si vous avez besoin du code d'un des éléments je le mettrai donc n’hésitez pas à me le demander.

    Cordialement tagashy.

Discussions similaires

  1. Erreur allocation memoire
    Par insa59 dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 03/04/2007, 09h59
  2. [Sécurité] Erreur d'allocation mémoire
    Par GLDavid dans le forum Langage
    Réponses: 4
    Dernier message: 28/04/2006, 08h34
  3. allocation memoire
    Par suckthewindow dans le forum C++
    Réponses: 2
    Dernier message: 18/10/2005, 14h57
  4. Réponses: 13
    Dernier message: 05/01/2004, 19h00
  5. Allocation memoire Limité avec TurboC
    Par sebastien51 dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 15/10/2003, 23h32

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