1

Salut
Je voudrais savoir comment se passe le retour par une fonction d'un pointeur sur une structure .

Je suppose que l'on declare la structure localement dans la fonction puis l'on retourne son adresse.

Mais bon je reste perplexe puisque dans mon esprit toutes les variables locales seront detruite a la sortie de la fonction.

J'aimerai bien compremdre comment cela se passe concretement.

Edit :
Ce que je fais actuellement c'est que je passe en parametre l'addresse de ma structure pour que la fonction la modifie

2

Oui si tu renvoies une structure définie localement tu n'as pas le droit de l'utiliser une fois que la fonction a retourné... Par contre évidemment tu as le droit de renvoyer un struct * qui pointe vers une structure globale ou allouée cheeky

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

3

il faut faire une allocation dynamique de ta structure (malloc / calloc / new etc) et retourner l'adresse, sinon effectivement l'espace memoire réservé pendant l'exécution de la fonction (sur la pile) est libéré => pointeur invalide

4

ok donc quand SymFindPtr retourne un SYM_ENTRY * c'est qu'il y a une variable globale en dessous.

Je pensait qu'il y avait une autre facon de faire.


Je fais une Librairie de Gestion de l'Estack Ti-Basic.
En fait je l'ai extrait de ExtLib et j'en ai profiter pour optimiser le code.

Le but c'est de parcourir une seule fois l'ESTACK pour referencer toutes les variables.

Les les elements des LIST/MATRIX sont indexes pour un acces plus rapide.

Je compte implementer le meme moteur que celui d'ExtLiB pour ce qui est
des boucles internes.

Je pense que je vais essayer d'en faire une Librairie dynamique, on vera.

5

C'est pas mal comme solution; si tu dois appeler malloc à chaque fois que tu utilises ta fonction pour que son retour soit valide, ça risque de poser de serieux problèmes de vitesse (sauf si tu n'utilises ta fonction une ou deux fois mais bon...)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

[EDIT : euh en fait andoh_wilfried a tout changé dans ./4, donc oubliez ce message triso]
./4> Oui, en général c'est ce qu'on fait ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

7

??? confus
Ça dépend de ce que fait la fonction :/ (création ou utilisation de la structure)
Si on doit créer la structure, qu'on le fasse dans la fonction ou juste avant je ne vois pas ce que ça change confus (à part que ça mélange le code #tricouic#)

Je ne comprend pas comment vous parvenez à faire une remarque d'ordre général là dessus #trihum#

8

on utilise souvent plus une structure qu'on ne la crée ^^
(et puis il a lui-même dit "pour que ma fonction la modifie", donc a priori c'est pas une fonction de création)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

9

ok, donc c'est exactement comme je procedais, sauf que je n'alloue pas de memoire dans mes fonctions.
Je prefere passer ou retourner un pointeur sur une structure visible a un niveau plus eleve.


Merci

Edit : le cas envisage au post ./7 m'intersse tout autant

10

pollux > ah ok grin
Zephyrsnail.gif > ok j'avais pas fait attention à l'edit du ./1

11

y'a plus de snail
!slap Pen^2
• Zeph slaps Pen^2 around a bit with a large trout !

embarrassed
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

12

Zephyrslug.gif > oui j'ai vu ça, j'ai donc eu peur que ça te manque #triange#