Static ??

Fermé
AnaGraM Messages postés 69 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 18 mai 2007 - 15 juin 2004 à 12:27
AnaGraM Messages postés 69 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 18 mai 2007 - 16 juin 2004 à 14:14
Bonjour,

J'ai un problème avec le mot clé static, enfin, je pense que ça vient de là.
Je développe une application avec wxWidgets et l'API C MySQL mais le problème n'est pas en rapport.

En fait, je récupère des données avec
        result = mysql_store_result(connection);
        resultat =(char *)malloc(1000 * sizeof(char));
        strcat(resultat,"$");

 
        while( ( row = mysql_fetch_row(result)) != NULL ) {
              strcat(resultat, row[1]);
              strcat(resultat, "\n");
        }


J'ai déclaré résultat en static char *resultat;
pour pas libérer la mémoire à la fin de la fonction. Je concatène '$' au début de la chaîne pour voir où j'en suis.


Dans la partie wxWidgets, j'ai ça :
void MyFrame::OnTry(wxCommandEvent& WXUNUSED(event))
{
    wxString msg;
    char *result;
    sqlgratuit cnx;
    
    result = (char*)malloc(50*sizeof(char));
    result = cnx.go();
    
    msg.Printf( _T("%s"), result);

    wxMessageBox(msg, _T("About Minimal"), wxOK | wxICON_INFORMATION, this);
}


Mais quand j'affiche le résultat, devant le '$', j'ai des caractères spéciaux ...
L'adresse que je récupère ne serait pas la bonne ? Je ne comprends pas le problème...

Merci d'avance

3 réponses

AnaGraM Messages postés 69 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 18 mai 2007 50
15 juin 2004 à 12:34
J'ai oublié de préciser que la première partie de code est dans une méthode go. Donc dans result = cnx.go(), je récupère le static char* resultat.
0
AnaGraM Messages postés 69 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 18 mai 2007 50
15 juin 2004 à 20:10
Vraiment personne ne sait ? ;-(
0
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
16 juin 2004 à 13:07
salut

2 possibilités :

1/
tu peux le déclarer en protected ou public dans l'objet
Mainframe en dehors de toute méthode, et là, pas la peine qu'il soit static, car sa durée de vie correspond à la durée de vie de ton instance de Mainframe.

2/
au lieu de faire
static char resultat =(char *)malloc(1000 * sizeof(char));
(c'est de l'allocation dynamique)
tu peux déclarer
char reslutat[1000];
comme ca, l'allocation statique etant gérée automatiquement par
le compilateur, tu n'écrase plus ta variable en ne faisant ni malloc ni free.
0
AnaGraM Messages postés 69 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 18 mai 2007 50
16 juin 2004 à 14:14
Merci blurk !

Problème résolu !!!
0