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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Question sur les pointeurs...

n°387995
theshockwa​ve
I work at a firm named Koslow
Posté le 09-05-2003 à 10:46:13  profilanswer
 

Reprise du message précédent :

haazheel a écrit :

Code :
  1. //--------------------------------------------
  2. __fastcall TForm1::TForm1(TComponent* Owner)
  3.         : TForm(Owner)
  4. {
  5. AnsiString toto; // <==== là, c'est pas bien ! ;)
  6. (AnsiString *) toto = getTableau();
  7. ShowMessage(toto[0]);
  8. }
  9. //-------------------------------------------------
  10. AnsiString* __fastcall TForm1::getTableau()
  11. {
  12. AnsiString tableau[] = { "oui", "je sais" };
  13. return (AnsiString *) tableau;
  14. }




 
AnsiString *toto; Ce serait bcp mieux ...
C'est quoi ce truc immonde que tu as fait la ligne d'en-dessous ? Tu castes la variable qui prend le retour ? C'est quoi cette horreur ? En gros, t'as dit au compilo : regarde pas mon erreur, c'est ca ? :D
 
Edit : commentaire dans le code
Edit 2 : je me demande si le tableau que tu déclares en statique dans ta fonction n'est pas libéré en sortie de fonction ...


Message édité par theshockwave le 09-05-2003 à 11:15:14

---------------
last.fm
mood
Publicité
Posté le 09-05-2003 à 10:46:13  profilanswer
 

n°388022
philou_a7
\_o&lt; coin ! &gt;o_/
Posté le 09-05-2003 à 11:24:55  profilanswer
 

Citation :

AnsiString *toto; Ce serait bcp mieux ...

 
 
oui, et avec une allocation / liberatioon memoire aussi  :heink:  
 
non parce que là, c'est plus que laid, c'est du segfault direct ce code !
 
un petit peu de lecture sur le "comment ca marche les pointeurs" serait tres tres loin d'etre superflu je pense....

n°388031
chrisbk
-
Posté le 09-05-2003 à 11:29:19  profilanswer
 

philou_a7 a écrit :

[quote]non parce que là, c'est plus que laid, c'est du segfault direct ce code !


 
 
ou est ce que c cense segfault ?

n°388062
theshockwa​ve
I work at a firm named Koslow
Posté le 09-05-2003 à 11:55:54  profilanswer
 

philou_a7 a écrit :

Citation :

AnsiString *toto; Ce serait bcp mieux ...

 
 
oui, et avec une allocation / liberatioon memoire aussi  :heink:  
 
non parce que là, c'est plus que laid, c'est du segfault direct ce code !
 
un petit peu de lecture sur le "comment ca marche les pointeurs" serait tres tres loin d'etre superflu je pense....


 
Je ne vois pas l'intérêt de faire une alloc dynamique alors que le tableau est statique ... Il est déjà en RAM ... Tu veux juste pointer dessus ...


---------------
last.fm
n°388698
haazheel
Posté le 09-05-2003 à 20:35:24  profilanswer
 

theShOcKwAvE a écrit :


C'est quoi ce truc immonde que tu as fait la ligne d'en-dessous ? Tu castes la variable qui prend le retour ? C'est quoi cette horreur ? En gros, t'as dit au compilo : regarde pas mon erreur, c'est ca ? :D


 

Code :
  1. (AnsiString *) toto = getTableau();


Cette ligne?
 
On peut pas donner à une variable le retour d'une fonction?
 
En fait, ma fonction doit retourner deux choses:
1 code d'erreur (0,1 ou 2) évalué grâce à un switch
le message d'erreur correspondant à ce code d'erreur...
 
Donc j'avais pensé retourner un tableau, et accéder aux valeurs contenues comme ça...
 

theShOcKwAvE a écrit :


Edit 2 : je me demande si le tableau que tu déclares en statique dans ta fonction n'est pas libéré en sortie de fonction ...


 
Je dois faire comment alors?

n°389515
theshockwa​ve
I work at a firm named Koslow
Posté le 11-05-2003 à 00:29:30  profilanswer
 

haazheel a écrit :

Code :
  1. (AnsiString *) toto = getTableau();


Cette ligne?


Oui, CETTE ligne ! :D
On ne cast (transtype) jamais la variable dans laquelle on va stocker un résultat ... Au pire, on fait le cast sur le résultat en question avant l'affectation ...
Dans ce cas là, ca te cause forcément un problème : tu reçois un pointeur sur un int et tu stockes l'adresse comme si il s'agissait de la valeur !
 
 

haazheel a écrit :

On peut pas donner à une variable le retour d'une fonction?


Ben ... Si, simplement, il faut que le retour de la fonction et la variable soient du même type ... Ou alors à la limite, tu fais un cast sur le retour de la fonction ...
 
 

haazheel a écrit :


En fait, ma fonction doit retourner deux choses:
1 code d'erreur (0,1 ou 2) évalué grâce à un switch
le message d'erreur correspondant à ce code d'erreur...


Ben ... Tu peux pas mettre les messages d'erreurs dans les divers cas de ton switch ? Style :
 

Code :
  1. switch(mavar) {
  2. case 0 :
  3.   fprintf("succès\n" );
  4.   break;
  5. case 1 :
  6.   fprintf("erreur 1\n" );
  7.   break;
  8. case 2 :
  9.   fprintf("erreur 2\n" );
  10.   break;
  11. default :
  12.   fprintf("résultat incohérent !\n" );
  13. }


 
Si tu n'as pas de traduction à gérer, le plus simple, c'est de mettre les chaines en dur ... (je peux me tromper là-dessus, mais bon ...)
 

haazheel a écrit :


Je dois faire comment alors?


Nan ... En fait, en y repensant, ca doit être OK ... Au pire, tu pourrais mettre aussi ton tableau en global (toujours en static const) mais ce n'est pas nécessaire ...


---------------
last.fm
n°389545
haazheel
Posté le 11-05-2003 à 03:12:11  profilanswer
 

theShOcKwAvE a écrit :


On ne cast (transtype) jamais la variable dans laquelle on va stocker un résultat ... Au pire, on fait le cast sur le résultat en question avant l'affectation ...


Transtyper, c'est changer le type d'une variable? (en gros ici je veux transformer un int en AnsiString, c'est ça?)
 
Donc faire le cast sur le résultat avant l'affectation, c'est, dans la fonction, changer le type de la variable de retour avant de la retourner, c'est ça?
 
(J'ai cherché transtyper dans les bouquins que j'ai, et j'ai pas trouvé :fou: , et là j'ai la flemme de chercher sur le net, il est tard et je me couche)
 

theShOcKwAvE a écrit :


Ben ... Tu peux pas mettre les messages d'erreurs dans les divers cas de ton switch ? Style :
 

Code :
  1. switch(mavar) {
  2. case 0 :
  3.   fprintf("succès\n" );
  4.   break;
  5. case 1 :
  6.   fprintf("erreur 1\n" );
  7.   break;
  8. case 2 :
  9.   fprintf("erreur 2\n" );
  10.   break;
  11. default :
  12.   fprintf("résultat incohérent !\n" );
  13. }




 
Le problème est que je fais appel à cette fonction à plusieurs endroits...
 
Donc il va falloir que je voie ça, surtout qu'il risque d'y avoir des traductions à l'avenir...
 
Peut-être récupérer le code de retour, et le passer à une fonction qui contient le switch et qui retourne le message d'erreur :??: Je verrai ça demain...
 
Encore merci et bonne nuit à ceux qui dorment pas encore...
 
 :sleep:  :sleep:

n°389678
theshockwa​ve
I work at a firm named Koslow
Posté le 11-05-2003 à 14:17:09  profilanswer
 

haazheel a écrit :


Transtyper, c'est changer le type d'une variable? (en gros ici je veux transformer un int en AnsiString, c'est ça?)


Le type-casting ou transtypage te permet de réaliser des conversions simples dans le type de tes variables .. Ca ne peut en aucun cas être utilisé pour convertir un nombre en une chaîne ...
 
Par contre, si tu as un int val par exemple qui contient 36, (char)val te donnera 36 mais codé sur un seul octet au lieu de 4 ...
Ca peut faire des changements plus évolués puisque ca permet notamment de passer d'entiers vers floats et inversement ...
Les type-cast restent quand même à utiliser avec précautions puisqu'ils peuvent masquer des erreurs au compilateur (on peut tout à fait transformer un pointeur en int ou inversement, mais ca n'est pas vraiment logique) Quoiqu'il en soit, ce n'est pas la variable en elle-même qui change de type mais par contre, on pourrait dire que c'est le contenu qui est adapté pour un autre réceptacle.
 
 

haazheel a écrit :


Donc faire le cast sur le résultat avant l'affectation, c'est, dans la fonction, changer le type de la variable de retour avant de la retourner, c'est ça?


Non, c'est faire ca :

Code :
  1. int mafonc() {
  2.   // ...
  3. }
  4. int main(int argc, char**argv) {
  5.   float toto = (float)mafonc();
  6.   return EXIT_SUCCESS;
  7. }


 

haazheel a écrit :


(J'ai cherché transtyper dans les bouquins que j'ai, et j'ai pas trouvé :fou: , et là j'ai la flemme de chercher sur le net, il est tard et je me couche)


transtypage, sur google ... C'est bon ... :D
 

haazheel a écrit :


Le problème est que je fais appel à cette fonction à plusieurs endroits...
 
Donc il va falloir que je voie ça, surtout qu'il risque d'y avoir des traductions à l'avenir...
 
Peut-être récupérer le code de retour, et le passer à une fonction qui contient le switch et qui retourne le message d'erreur :??: Je verrai ça demain...
 
Encore merci et bonne nuit à ceux qui dorment pas encore...
 
 :sleep:  :sleep:  


 
Ouais, faire une fonction statique qui à partir d'un code d'erreur te retourne une chaine descriptive de l'erreur me semble être la meilleure solution ...
 


---------------
last.fm
n°389765
theshockwa​ve
I work at a firm named Koslow
Posté le 11-05-2003 à 15:55:02  profilanswer
 

WarmasterCS a écrit :

*A : la valeur ou A pointe ?
&A : l'adresse vers lequelle A pointe ?
A  : pointe vers kelke chose ?
 
??????


 
houlala ! :D
 

Code :
  1. int val = 512; // valeur entière
  2. int *A, *B; // pointeurs sur entier
  3. A = &val; // On fait pointer A sur val
  4. B=A; // on copie l'adresse contenue dans A dans B
  5. /* '=>' signifie "s'évalue en"
  6. *A => 512
  7. *B => 512
  8. A==B et *A==*B, mais &A!=&B
  9. */
  10. *B = 36
  11. /*
  12. *A => 36
  13. *B => 36
  14. */


 
ca clarifie la situation ?
 
Dans une expression :
& sert à récupérer l'adresse d'une variable
* sert à regarder à l'adresse donnée par la variable
 
en déclaration :
& sert à faire une référence dans les params d'une fct
* sert à déclarer un pointeur
 
voili voilou ...


---------------
last.fm
n°389770
warmasterc​s
Posté le 11-05-2003 à 16:02:32  profilanswer
 

oki j te remercie .. j me suis dis ma kestion est un peu con j vais l elenvé lol merci :)


---------------
un sabre est une arme. le kenjutsu, une technique de mort. Peu importent les bonnes intentions, c'est la seul vérité. On tue pour protéger. On tue pour que d'autres vivent. C'est ca, la vérité du sabre.
mood
Publicité
Posté le 11-05-2003 à 16:02:32  profilanswer
 

n°389773
theshockwa​ve
I work at a firm named Koslow
Posté le 11-05-2003 à 16:05:28  profilanswer
 

WarmasterCS a écrit :

oki j te remercie .. j me suis dis ma kestion est un peu con j vais l elenvé lol merci :)


jamais virer les questions ... Ca peut toujours servir à quelqu'un d'autre ...


---------------
last.fm
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[KDE C++] Newbee Question de compilationchtite question à propos de $_POST
Chtite question de Templates VS bête tableau en PHP.question simple
Pointeurs sur fonctions (question pointue !)petite question sur les pointeurs
[C] Petite question sur les pointeurs deux étoiles qui se suivent[C++] Question sur les pointeurs, aidez moi à comprendre svp !
[C++] question bête sur la programmation et les pointeurs...[c++] petite question sur les pointeurs (pas un problème)
Plus de sujets relatifs à : Question sur les pointeurs...


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