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

 C Discussion :

Erreurs d'allocation (plus segfault).


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 16
    Par défaut Erreurs d'allocation (plus segfault).
    Bonjour,
    Ca faisait un moment que je n'avais pas fait de C et je m'aperçoit que c'est fou ce qu'on peut oublier sans pratique .

    Bon voila j'ai une triste erreur sur mes malloc lors de leur utilsation

    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
    72
    73
     
    sock_err = send(s, (char*)buff, (strlen(buff)+1)*sizeof(char), MSG_NOSIGNAL);
    			// s le socket sur laquel on écrit
    			// buff le message écrit
    			// (strlen(buff)+1)*sizeof(char) la longueur du message
    			// MSG_NOSIGNAL permet de choisir la faïçon dont le système réagira si la conexion est brisée
    			// lors du send. Dans ce cas, par defaut, le send génére un signal, il faudrait donc prévoir le cas
    			// et le traiter avec un sigaction. Or je n'ai pas envie de le faire.
    			// Avec l'option MSG_NOSIGNAL, la fonction send s'arréterra sur une erreur ce qui est plus
    			// simple à traiter.
    			if (sock_err < 0) {
    				perror("erreur dans le send");
    				break;
    			}
     
    			size_t nbo,final = 0;
    			int taille_fichier=0;
    			int i =0;
    			char taille_fichier_c[10]={0};
    			int recu_taille = 0;
    			char* resultat = malloc(1*sizeof(char));// resultat à afficher.
     
    			//---------------ecoute en attente de la taille de la chaine de caractéres
     
    			do{	
     
     
    				nbo = recv(s, buff, TAILLE_BUFF, 0);
    				final+=nbo;
     
     
    				//on va créer une chaine de caractère contenat le resulat final
     
    				if(recu_taille == 0){
     
    				    //récupération et convertion de la taille
    				    do{
    				      taille_fichier_c[i]=buff[i];
    				      i++;
    				    }while(buff[i]!=':');
    				    taille_fichier = atoi(taille_fichier_c);
     
    				   //allocation de la chaine				    
    				    resultat = realloc(resultat, (taille_fichier+1)*sizeof(char));
    				    //resultat=realloc(resultat,taille_fichier+1);
    				    printf("taille alloué : %d\n",taille_fichier+1);
    				    recu_taille=1;
    				    //on copie le buffer dans la chaine en prenant soin d'enlever la chaine qui donne la taille 
    				    strcpy(resultat,buff+10);
    				  //on enlève les déchets en fin de ligne.
    				  resultat[taille_fichier-(strlen(taille_fichier_c)+2)]='\0';
    				   printf("taille utilisé : %d\n",taille_fichier-(strlen(taille_fichier_c)+2));
     
     
    				}
    				else{
     
    				   //on copie le buffer dans la chaine
    				   resultat=strcat(resultat,buff); 
    				}	
     
     
    			//Pour vider notre buff pour evité les erreurs de traitement.
    			memset (buff, 0, sizeof (buff));
     
    			}while(final!=(taille_fichier+10));
    			//printf("%s\n",resultat);	
     
    			free(resultat);
    			resultat = NULL;
     
     
    		}//fin if liste

    Après un petit coup de valgrind j'ai ce genre d'erreur : au premier passage

    ==6093== Invalid write of size 1
    ==6093== at 0x40282EB: strcat (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6093== by 0x8048CFC: main (client.c:181)
    ==6093== Address 0x41ac420 is 0 bytes after a block of size 3,112 alloc'd
    ==6093== at 0x4027EFC: realloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6093== by 0x8048C69: main (client.c:166)
    ==6093==
    ==6093== Invalid write of size 1
    ==6093== at 0x40282FE: strcat (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6093== by 0x8048CFC: main (client.c:181)
    ==6093== Address 0x41ac486 is not stack'd, malloc'd or (recently) free'd
    ==6093==
    ==6093== Invalid read of size 1
    ==6093== at 0x40282D3: strcat (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6093== by 0x8048CFC: main (client.c:181)
    ==6093== Address 0x41ac420 is 0 bytes after a block of size 3,112 alloc'd
    ==6093== at 0x4027EFC: realloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6093== by 0x8048C69: main (client.c:166)


    C'est dans le second que je tape un segfault que je ne comprend pas :


    ==6093== Invalid write of size 1
    ==6093== at 0x40282EB: strcat (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6093== by 0x8048CFC: main (client.c:181)
    ==6093== Address 0x41ac420 is 0 bytes after a block of size 3,112 alloc'd
    ==6093== at 0x4027EFC: realloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6093== by 0x8048C69: main (client.c:166)
    ==6093==
    ==6093== Invalid write of size 1
    ==6093== at 0x40282FE: strcat (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6093== by 0x8048CFC: main (client.c:181)
    ==6093== Address 0x41ac486 is not stack'd, malloc'd or (recently) free'd
    ==6093==
    ==6093== Invalid read of size 1
    ==6093== at 0x40282D3: strcat (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6093== by 0x8048CFC: main (client.c:181)
    ==6093== Address 0x41ac420 is 0 bytes after a block of size 3,112 alloc'd
    ==6093== at 0x4027EFC: realloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6093== by 0x8048C69: main (client.c:166)
    prompt : liste

    --6093-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) - exiting
    --6093-- si_code=1; Faulting address: 0x6C24F764; sp: 0x6236BE98

    valgrind: the 'impossible' happened:
    Killed by fatal signal
    ==6093== at 0x38023956: (within /usr/lib/valgrind/x86-linux/memcheck)
    ==6093== by 0x38002BE0: (within /usr/lib/valgrind/x86-linux/memcheck)
    ==6093== by 0x3800308D: (within /usr/lib/valgrind/x86-linux/memcheck)
    ==6093== by 0x38039441: (within /usr/lib/valgrind/x86-linux/memcheck)
    ==6093== by 0x3804D8E8: (within /usr/lib/valgrind/x86-linux/memcheck)

    sched status:
    running_tid=1

    Thread 1: status = VgTs_Runnable
    ==6093== at 0x4027DDE: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6093== by 0x8048BE6: main (client.c:143)


    Voila voila , vous l'aurez compris je suis paumé

    Ca serait vraiment gentil de me donnée un coup de mani ^^

    merci d'avance

  2. #2
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 16
    Par défaut Trouvé \o/
    Désolé d'avoir pollué le forum de postes inutile , j'ai trouvé la solution par moi même.

  3. #3
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Le post n'est pas inutile si tu explique quelle etait la cause et quelle etait la solution.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur d'allocation dynamique de tableaux
    Par lclclc dans le forum Fortran
    Réponses: 1
    Dernier message: 02/04/2008, 15h10
  2. erreur d'allocation de mémoire?
    Par ulnar dans le forum C
    Réponses: 17
    Dernier message: 18/05/2007, 09h36
  3. Réponses: 6
    Dernier message: 04/01/2007, 16h34
  4. [Sécurité] Erreur d'allocation mémoire
    Par GLDavid dans le forum Langage
    Réponses: 4
    Dernier message: 28/04/2006, 08h34
  5. Erreur non spécifiée... plus de form
    Par directs dans le forum EDI
    Réponses: 5
    Dernier message: 26/01/2006, 09h31

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