Probleme complique sur pointeur mais reponse simple surement
MrKribou
Messages postés21Date d'inscriptiondimanche 18 août 2002StatutMembreDernière intervention 8 novembre 2002
-
26 août 2002 à 01:11
jfloviou
Messages postés17Date d'inscriptionsamedi 23 mars 2002StatutMembreDernière intervention25 septembre 2002
-
29 août 2002 à 04:21
Un probleme de pointeur je pense.
Je vous expose la situation :
Dans une Classe (ClassEx) voila je fais un truc du genre :
char* pChar = this->getInfo("info1", "info2");
getInfo c une methode de la classe qui ressemble a ca :
if (!GetPrivateProfileString(anInfo1, anInfo2, "", info, sizeof(info), _iniFile ))
MessageBox (NULL, "probleme de recuperation de donnees dans le fichier ini" , "erreur", 0 + MB_ICONASTERISK);
return pInfo;
}
GetPrivateProfileString sert a trouver une valeur d'une donnee a partir de cle (dans un fichier ini par exemple)
le probleme c'est que j'ai pas trouver de moyen pour que la fonction GetPrivateProfileString me renvois un char* alors je suis obliger d'utiliser char[] pour contenir l'info.
Etant donne que je tiens absolument a renvoyer un char* je met un pointeur vers le tableau info[]. Tant que je suis dans la methode, pInfo pointe sur la valeur qu'il faut, mais des que je retourne pInfo a pChar, mon pChar du debut lui pointe sur n'importe quoi (Alors qu'il devrait pointer sur la meme adresse que pInfo, c'est a dire le tableau non ?
Je viens du Java et je m'embroille pas mal avec ces pointeurs la (je pense que le probleme viens de la)
Si kkun pouvait m'aider a ce probleme ca pourrait me permettre d'avancer dns la comprehension des pointeurs (j'espere:))
J'en profite pour poser une question relative au C++. En java on se casse pas la tete on utilise la classe String, mais en C++, ya des char*, des char[], des LPCTSTR, des string, koi faut utiliser en priorite et en fonction de quoi ?
Merci pour les reponses meme si elles sont juste partielles :)
A voir également:
Probleme complique sur pointeur mais reponse simple surement
jcecchi
Messages postés117Date d'inscriptionsamedi 12 janvier 2002StatutMembreDernière intervention14 janvier 20033 26 août 2002 à 12:49
Salut,
le probleme est tres simple.
En fait pInfo pointe sur info qui une variable locale. Tant que tu es dans ta fonction cette variable existe, mais des que tu renvoie pInfo, la fonction se termine et la variable info est detruite. Resultat : pInfo pointe sur une zone non valide et provoque une erreur.
Solution 1 :
recupère ta valeur dans info.
ensuite recupère la longueur de info (strlen).
alloue la memoire necessaire pour pInfo (new).
copie le contenu de info dans pInfo (strcpy).
retourne pInfo.
Solution 2 : (a verifier)
alloue l'espace memoire pour pInfo (new).
passe le en paramètre dans GetPrivate...
retourne pInfo.
En gros GetPrivateProfileString va mettre la chaine de caractère dans le buffer de pInfo (cad la zone mémoire reserve pour pInfo), mais toi tu n'as pas du faire de new donc ca marche pas.