Erreur de segmentation

Erreur de segmentation - C - Programmation

Marsh Posté le 16-06-2005 à 15:10:24    

Bonjour a tous, je suis en train de programmer un petit script en C pour un annuaire ldap. J'aimerais modifier un champ, mais je ne comprend pas trop l'utilisation de la structure ldapmod, qui servira ensuite dans ldap_modify_s.
 
Voila mon code qui crée une erreur de segmentation (des le mod[0]->mod_op = LDAP_MOD_REPLACE;)
 

Code :
  1. LDAPMod **mod;
  2. mod[0]->mod_op = LDAP_MOD_REPLACE;
  3. mod[0]->mod_type = "uid";
  4. mod[1] = (LDAPMod *) 0;
  5. modify[0] = "256";
  6. modify[1] = (char *) 0;
  7. mod[1]->mod_values = modify;


 
 
Voici la structure ldapmod :  
 

Code :
  1. typedef struct ldapmod {
  2.               int mod_op;
  3.               char *mod_type;
  4.               union {
  5.                   char **modv_strvals;
  6.                   struct berval **modv_bvals;
  7.               } mod_vals;
  8.               struct ldapmod *mod_next;
  9.           } LDAPMod;


 
J'ai essayé de recopier sur un exemple : https://picolibre.enst-bretagne.fr/ [...] .c?rev=1.2, mais ca me met une erreur de segmentation des la premiere ligne : mod[0]->mod_op = LDAP_MOD_REPLACE;
 
Quelqu'un pourait m'expliquer ca ?


Message édité par #SubZero le 16-06-2005 à 15:49:03
Reply

Marsh Posté le 16-06-2005 à 15:10:24   

Reply

Marsh Posté le 16-06-2005 à 15:56:41    

4bis a écrit :

Bonjour a tous, je suis en train de programmer un petit script en C pour un annuaire ldap. J'aimerais modifier un champ, mais je ne comprend pas trop l'utilisation de la structure ldapmod, qui servira ensuite dans ldap_modify_s.
 
Voila mon code qui crée une erreur de segmentation (des le mod[0]->mod_op = LDAP_MOD_REPLACE;)
 

Code :
  1. LDAPMod **mod;
  2. mod[0]->mod_op = LDAP_MOD_REPLACE;




'mod' est un pointeur non initialisé. Déréférencer un pointeur non initialisé invoque un comportement indéfini.

Citation :


J'ai essayé de recopier sur un exemple : https://picolibre.enst-bretagne.fr/ [...] .c?rev=1.2


Visiblement, tu as loupé un point important


      LDAPMod **modifpwd;
<...>
      if((modifpwd = (LDAPMod **) malloc(2 * sizeof(LDAPMod *))) == (LDAPMod **) 0)
     return (3);


Message édité par Emmanuel Delahaye le 16-06-2005 à 16:00:58

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 16-06-2005 à 16:05:27    

Merci beaucoup, je l'avais completement zappé, et vu que ca fait plusieurs années que j'ai aps fait de c, je pensais plus au malloc. :jap:
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed