utilisation de mysql++ => Seg Fault !

utilisation de mysql++ => Seg Fault ! - C++ - Programmation

Marsh Posté le 19-04-2007 à 16:21:51    

Bonjour,
 
Je suis sur le développement d'un logiciel libre destiné à la compression en masse.
J'ai développé une partie du programme en C, avec la lib mysql sans trop de problème, cependant je dois m'attaquer maintenant à la partie C++ avec mysql++, et n'ayant pas fait de C++ depuis longtemps j'ai un peu de mal !
 

Code :
  1. // Connect to the sample database.
  2. mysqlpp::Connection con(false);
  3. con.connect("test", "localhost", "toto", "toto" );
  4. if (!con)
  5. {
  6. cerr << "Database connection failed: " << con.error() << endl;
  7. return 1;
  8. }


 
La connexion à la base se déroule bien, c'est apparement ma création de requete qui merde :

Code :
  1. mysqlpp::Query query = con.query();
  2. query << "SELECT * FROM slave";
  3. mysqlpp::Result res = query.store();
  4. cout << "We have:" << endl;
  5. if (res) {
  6. char buf[100];
  7. mysqlpp::Row row;
  8. mysqlpp::Row::size_type i;
  9. for (i = 0; row = res.at(i); ++i) {
  10. cout << '\t' << row.at(0) << endl;
  11. // cout << '\t' << strncpy(buf, row.at(0), sizeof(buf)) << endl;
  12. }
  13. }
  14. else {
  15. cerr << "Failed to get item list: " << query.error() << endl;
  16. return 1;
  17. }


 
Le code comme ca, il marque le We have, la premiere valeur du champ de la table, et apres SegFault...
Si je commente le premier cout et décommente le second, il seg fault après le We have :
Résultat, compilé avec ou sans efence :

Citation :

Electric Fence 2.1 Copyright © 1987-1998 Bruce Perens.
We have:
127.0.0.1
Segmentation fault


 
et si je commente tout à partir du if (res) :

Citation :

Electric Fence 2.1 Copyright © 1987-1998 Bruce Perens.
We have:
 
ElectricFence Aborting: free(804d294): address not from malloc().
Illegal instruction


 
et sans efence :

Citation :

We have:
*** glibc detected *** free(): invalid pointer: 0x0804de0c ***
Aborted


 
Si quelqu'un a une idée, ou si vous pensez que j'ai pu oublier quelque chose, je suis preneur de toute idée, parce que j'ai un peu beaucoup de mal à me remettre au C++ après toutes ces années sans, et mon niveau était déja pas très élevé, donc...
 
Je viens de testé cette méthode :

Code :
  1. mysqlpp::Query query = con.query();
  2. query << "select * from slave";
  3. mysqlpp::ResUse res = query.use();
  4. // Retreive result rows one by one, and display them.
  5. if (res) {
  6. // Display header
  7. cout.setf(ios::left);
  8. cout << setw(21) << "IP" <<
  9. setw(10) << "Port" <<
  10. setw(10) << "State" <<
  11. endl << endl;
  12. // Get each row in result set, and print its contents
  13. mysqlpp::Row row;
  14. while (row = res.fetch_row()) {
  15. cout << setw(20) << row["ip"] << ' ' <<
  16. setw(9) << row["port"] << ' ' <<
  17. setw(9) << row["state"] << ' ' <<
  18. endl;
  19. }
  20. return 0;
  21. }
  22. else {
  23. cerr << "Failed to get stock item: " << query.error() << endl;
  24. return 1;
  25. }


 
 
Mais toujours pareil :

Citation :

We have:
IP Port State
 
127.0.0.1 30000 Waiting
Segmentation fault


 
(Je me base sur les exemples de la librairies mysql++)
 
Merci d'avance !
Si vous avez des idées n'hésitez pas ! (et n'hésitez pas à donner des détails, je ne suis pas très fort ;))


Message édité par Ternel- le 19-04-2007 à 16:22:52
Reply

Marsh Posté le 19-04-2007 à 16:21:51   

Reply

Sujets relatifs:

Leave a Replay

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