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