Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2475 connectés 

  FORUM HardWare.fr
  Programmation
  C

  tableaux de pointeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tableaux de pointeurs

n°1953354
yartempion
Posté le 28-12-2009 à 05:37:59  profilanswer
 

Bonjour,
Je cherche a créer un tableau de pointeur et a le remplir avec des valeurs d'autre pointeur
voici un bout de prog
je fait glisser une fenetre de lecture et lorsque je detecte la chaine client-ip  je lis les caracteres suivants sans les conserver tant que ce sont des esp ensuite je concatene les carcteres suivants tant que ce ne sont pas des esp.
Le but etatnt de recupérer la valeur du pointeur de la chaine concatenée pour la mettre dans un tableau de pointeur via la fonction strcpy et la ça coinçe.Quelqu'un peut il voir ce qui cloche dans le principe.
Cordialement

Code :
  1. int Sup_ACL(begin_line,end_line)
  2. {
  3. char **temp_Sup_clientip,**Sup_clientip,*car_int,*add_ip,*temp_add_ip,*temp_Sup_clientip1;
  4. int resultat5,pos_line,end_line1,long_add_ip,nb_add_ip;
  5. printf("\nProcedure de  suppression" );
  6. pos_line=begin_line;
  7. end_line1=end_line;
  8. nb_add_ip=0;
  9. if((Sup_clientip=(char**)calloc (10,sizeof(char*)))==NULL) 
  10.   {
  11.   perror("\nErreur sur allocation de clientip1" );
  12.   exit(4);
  13.   }
  14.   if((temp_Sup_clientip1=(char*)calloc (1,sizeof(char*)))==NULL) 
  15.   {
  16.   perror("\nErreur sur allocation de temp_clientip1" );
  17.   exit(4);
  18.   }
  19. for(pos_line;pos_line<=end_line1;pos_line++)   /*Recher de la chaine client-ip*/
  20.     {
  21.     printf("\nDebut de la boucle for" );
  22.     temp_Sup_clientip=Sup_clientip;
  23.     printf("\navnt le realloc" );
  24.     if((Sup_clientip=(char**)realloc (temp_Sup_clientip,(nb_add_ip+2)*sizeof(char*)))==NULL) 
  25.         {
  26.          perror("\nErreur sur reallocation de memoire add_ip" );
  27.          exit(4);
  28.         }
  29.      fseek(Instructions,pos_line,SEEK_SET);
  30.      printf("\navant le read" );
  31.      if((resultat5=fread(temp_Sup_clientip1,sizeof(char),9,Instructions))<1)
  32.      {
  33.        perror("\nErreur de lecture du temp_clientip1 resultat4= %d",resultat5);
  34.        exit(4);
  35.       }
  36.       printf("\navant le strcmp" );
  37.       if(!strcmp(temp_Sup_clientip1,"client-ip" ))
  38.       {
  39.       printf("\nReconnaissance de la chaine client-ip" );
  40.    
  41.       do /*Recherche des add_ip*/
  42.       {
  43.       printf("\ndans la do" );
  44.       if((car_int=(char*)calloc (2,sizeof(char*)))==NULL) 
  45.      {
  46.       perror("\nErreur sur allocation de car_esp" );
  47.       exit(4);
  48.       }
  49.       if((resultat5=fread(car_int,sizeof(char),1,Instructions))<1)
  50.      {
  51.        perror("\nErreur de lecture du car_esp resultat4= %d",resultat5);
  52.        exit(4);
  53.       }
  54.       pos_line++;
  55.       printf("\nfin la do %d",*car_int);
  56.       }while(*car_int==32);
  57.    
  58.       long_add_ip=1;
  59.      if((add_ip=(char*)calloc (2,sizeof(char*)))==NULL) 
  60.      {
  61.       perror("\nErreur sur allocation de add_ip" );
  62.       exit(4);
  63.       }
  64.  
  65.       do
  66.       {
  67.       if((car_int=(char*)calloc (2,sizeof(char*)))==NULL) 
  68.      {
  69.       perror("\nErreur sur allocation de car_esp" );
  70.       exit(4);
  71.       }
  72.       if((resultat5=fread(car_int,sizeof(char),1,Instructions))<1)
  73.      {
  74.        perror("\nErreur de lecture du car_esp resultat4= %d",resultat5);
  75.        exit(4);
  76.       }
  77.       if(car_int!=32)
  78.       {
  79.       temp_add_ip=add_ip;
  80.       printf("\ndans la do %c",*temp_add_ip);
  81.       printf("\naprés reaffectation valeur de strlen %d car_int %c",strlen(temp_add_ip),car_int);
  82.        if((add_ip=(char*)realloc (temp_add_ip,strlen(temp_add_ip)+2))==NULL) 
  83.         {
  84.          perror("\nErreur sur reallocation de memoire add_ip" );
  85.          exit(4);
  86.         }
  87.         strcat(add_ip,car_int);
  88.          printf("\nadd_ip %s et car_int %c %d",add_ip,*car_int,*car_int);
  89.       }
  90.      pos_line++;
  91.    
  92.       }while(*car_int!=32);
  93.       printf ("\nSortie de do car_int %d %d %d",*car_int,nb_add_ip,add_ip);
  94.       strcpy(Sup_clientip[nb_add_ip],&add_ip);
  95.       printf("\n apres le strcpy" );
  96.       printf("\n**Sup_clientip %s",Sup_clientip[nb_add_ip]);
  97.       nb_add_ip++;
  98.       printf ("\nfin du for" );
  99.       sleep(20);
  100.       }
  101.     }
  102.     sleep(20);
  103.     return(1);
  104. }

mood
Publicité
Posté le 28-12-2009 à 05:37:59  profilanswer
 

n°1953357
Joel F
Real men use unique_ptr
Posté le 28-12-2009 à 08:09:11  profilanswer
 

quel est le problème ??

n°1953393
yartempion
Posté le 28-12-2009 à 12:07:28  profilanswer
 

9a compile mais  a l'execution fichier  core = erreur memoire

n°1953515
__tomjost
c'est un pseudo !
Posté le 28-12-2009 à 22:38:02  profilanswer
 

yartempion a écrit :

9a compile mais  a l'execution fichier  core = erreur memoire


 
 :pfff:  il faut au moin indiquer la ligne du erreur.
je nvai pas lire , mais je vois trop de Ptr and loops
-> possible debordement du memoire , verify

n°1953539
Joel F
Real men use unique_ptr
Posté le 29-12-2009 à 07:49:25  profilanswer
 

yartempion a écrit :

9a compile mais  a l'execution fichier  core = erreur memoire


ca n'aide pas ...
 
tu dois acceder à de la mémoire non allouée quelque aprt dans ton bordel.  
Deux conseils:
- separe ton code en fonction plus simple
- utilise valgrind pour detecter les pbs de mémoires

n°1953563
fred777888​999
Posté le 29-12-2009 à 10:44:57  profilanswer
 

Quel bordel sans nom, la liste de tout ce qui ne va pas juste a la premiere lecture est longue :
Affectation de car_int dans le test sur une zone de memoire mise a zero automatiquement, puis chargee par le fread et testee parfois comme un char * parfois fois comme un char, boucle une fois for, une fois do-while, commentaires completements inutiles ou absents et le tout dans un meme bon gros bloc bien barbare. Meme pas l'excuse de la performance car le realloc de strlen alors qu'on pourrait memoriser la longueur a chaque tour de boucle est la cata. Sans mentionner les fuites memoire sur car_int alloue a chaque tour de boucle et jamais libere. Des noms de variables sexy comme resultat5 (j'imagine que les 4 premiers etaient occupes), le ad_ip utilise parfois comme char *, parfois comme je ne sais pas quoi (strcpy... &ad_ip), le sup_clientip dont les pointeurs sont bien alloues (enfin je le suppose) mais pas chacun des elements du tableaux auxquels on accede via le fameux strcpy (le core doit probablement venir de par la)...
Bref, un seul remede, reecrire proprement. Si je dois maintenir un code ecrit comme ca, je met un contrat sur la tete de son auteur, le core etant un resultat absolument certain des la lecture des premieres lignes de code. Imagine devoir revenir la dessus dans 3 mois (parceque ton truc plante a cause d'une ligne ip vide par ex dans un fichier mal forme) et tu comprendra ton malheur.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  tableaux de pointeurs

 

Sujets relatifs
Tableaux d'objetsRecherche des 10 premiers caractères d une cellule dans 3 tableaux.
les pointeurs , les tableaux ??? je mis perdPetit probleme de pointeurs sur des tableaux d'une structure
Problemes avec pointeurs/tableaux adresses[C] tableaux de pointeurs [Resolu]
double pointeurs et tableaux?[C] - Tableaux de pointeurs et liste chainees (ENCORE UN PROB)
[C] - Tableaux de pointeurs et liste chainees ( résolu ! )[C++(?)]Tableaux de pointeurs..
Plus de sujets relatifs à : tableaux de pointeurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR