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

  FORUM HardWare.fr
  Programmation
  C++

  [C++ DL Linux] invalid pointer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++ DL Linux] invalid pointer

n°1295861
RaphAstron​ome
Posté le 31-01-2006 à 20:02:16  profilanswer
 

J'utilise cette classe pour charger des .so, le fonctionnement est assez simple :
 

Code :
  1. class DynamicLibrary {
  2. private:
  3. void* m_handle;
  4. public:
  5. DynamicLibrary() : m_handle(NULL) {}
  6. ~DynamicLibrary() {}
  7. // Ouverture de la librairie dynamique à l'adresse "path". S'il y a une erreur,
  8. // la fonction renvoie false, sinon true. Si auto_add_suffix est à true, le suffixe
  9. // .dll ou .so est automatiquement ajouté (selon l'OS sur lequel on compile).
  10. inline bool Open(const char* path, bool auto_add_suffix=true);
  11. // Fonction renvoyant un pointeur vers le symbole demandé s'il est trouvé, sinon
  12. // elle renvoie NULL.
  13. inline void* GetSymbol(const char* symbol_name);
  14. // Fermeture de la librairie.
  15. inline void Close();
  16. };
  17. bool DynamicLibrary::Open(const char* path, bool auto_add_suffix) {
  18. if(auto_add_suffix)
  19. {
  20.  char* buffer = new char[strlen(path)+4];
  21.  sprintf(buffer, "%s.so", path);
  22.  m_handle = dlopen(buffer, RTLD_LAZY);
  23.  char* erreur = dlerror();
  24.  if (erreur) printf("ERROR : %s\n", erreur);
  25.  delete [] buffer;
  26. }
  27. else
  28.  m_handle = dlopen(path, RTLD_LAZY);
  29. return m_handle != NULL;
  30. }
  31. void* DynamicLibrary::GetSymbol(const char* symbol_name) {
  32. return dlsym(m_handle, symbol_name);
  33. }
  34. void DynamicLibrary::Close() {
  35. if(m_handle != NULL)
  36. {
  37.  printf("Arret d'un module : " );
  38.  dlclose(m_handle);
  39.  m_handle = NULL;
  40.  printf("ok\n" );
  41. }
  42. }


 
Tout fonctionne à merveille sauf que au niveau de dlclose() j'obtient :

Citation :

*** glibc detected *** free(): invalid pointer: 0x0000000000721ca8 ***


 
Et lorsque je l'enleve ça marche (sauf que ça ferme pas comme il faut la lib "dl" )
 
dlclose n'est jamais sensé planter même avec un pointeur foireux (et je suis sur que non).

mood
Publicité
Posté le 31-01-2006 à 20:02:16  profilanswer
 

n°1295863
Joel F
Real men use unique_ptr
Posté le 31-01-2006 à 20:05:02  profilanswer
 

Et la RAII :o ton close devraient etre dans le destructeur je pense.


Message édité par Joel F le 31-01-2006 à 20:07:18
n°1295898
skelter
Posté le 31-01-2006 à 20:56:16  profilanswer
 

et l'assignation et la copie ne sont pas safe, il faut au moin un constructeur qui appel open, un destructeur qui appel close, le constructeur par copie et l'operateur d'affectation définies

n°1295917
Joel F
Real men use unique_ptr
Posté le 31-01-2006 à 21:33:19  profilanswer
 
n°1295918
skelter
Posté le 31-01-2006 à 21:34:50  profilanswer
 

oui

n°1298909
RaphAstron​ome
Posté le 03-02-2006 à 22:39:41  profilanswer
 

Si je ne l'ai pas mis de un déstructeur il y a peut être une raison.
 
Sinon ça peut pas être dû à un truc genre dlclose(NULL) car il vérifie avant.

n°1299000
skelter
Posté le 04-02-2006 à 13:55:53  profilanswer
 

RaphAstronome a écrit :

Si je ne l'ai pas mis de un déstructeur il y a peut être une raison.


 
pour quelle raison tu ne le met pas dans destructeur ? en fait c'est quoi l'interet d'utiliser une classe dans ce cas ? (surtout que à par ca c'est du C)
 
Pour le bug si ca ne peut pas etre un dlclose sur un handle deja fermé alors c'est que l'espace memoire ou se trouve l'objet est corrompu, faut voir du coté du code appelant


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

  [C++ DL Linux] invalid pointer

 

Sujets relatifs
Création de dsn sous linux en console[Eclipse 3.1] Eclipse rame sous linux, Que faire ?
[Java] Process marche sous windows, pas sous linuxPb de mysql_fetch_array(): sous linux mais pas phpDev
Telecharger Un fichier en C sous Linuxliens hypertextes dans une console Linux ?
Include multiples qui font planter la compilation (Gcc Linux)Installation librairie SDL sous linux: cannot find -lmingw32
Librairie graphique pour jeu de voiture (linux)Probleme setIcon sous linux & Javadoc
Plus de sujets relatifs à : [C++ DL Linux] invalid pointer


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