Pile en C#

Résolu
cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009 - 21 févr. 2005 à 14:22
cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009 - 2 mai 2005 à 08:22
Bonjour,

Pour me faire un peu mal, j'ai décidé de réecrire la gestion des piles en C#, bien
qu'il existe une classe pour ça. Je suis confronté au problème suivant :

public void Empile (int val)
{
Spile* tempo = stackalloc Spile[1];

//Spile tempo = new Spile();
Console.WriteLine ("@ tempo : {0}",(int)tempo);
tempo->valeur = val;
if (debut == null)
tempo->suivant = null;
else
tempo->suivant = debut;
debut = tempo;
GC.KeepAlive (*tempo);
}

Malgrés mes précautions, mon objet tempo est considéré comme temporaire. A
chaque fois que j'entre dans ma fonction Empile, le system me réaloue le même
bloc mémoire !
Il ne me reste plus que trois cheveux sur la tête, ayez pitié d'eux, aidez moi.

6 réponses

cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009
2 mai 2005 à 08:22
Hélas non, il ne suffit pas d'utiliser "fixed", tu penses bien que j'ai déjà essayé !!! Il faut utiliser une classe qui accede directement au systeme (je ne me souviens déjà plus du nom, il y a déjà 2 mois tu me diras)
3
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
21 févr. 2005 à 21:19
C'est vrai que c'est pas vraiment utile de créer quelque chose qui existe déjà au sein du Framework, et qui marche très bien d'ailleurs...
De plus, je ne vois pas pourquoi tu t'obstines à utiliser des pointeurs : les pointeurs c'est cool, mais en C# on préfère ne pas les utiliser : C'est pas pris en compte par le CLR et en plus, dans 99% des cas, ça n'amène absolument rien de plus.

Si tu tiens vraiment à refaire un sytème de Stack FIFO ou LIFO, prend un ArrayList et ajoute quelques méthodes utiles pour faire des pop,des push et autre action utile!

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
spaceclic Messages postés 9 Date d'inscription lundi 26 janvier 2004 Statut Membre Dernière intervention 20 avril 2005
23 févr. 2005 à 09:31
Ton système de liste chainée me parait bien, parcontre il faut que tu retournes la référence de l'object alloué dynamiquement.
0
cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009
23 févr. 2005 à 10:24
Merci pour vos reponses:

Bidou : L'interet de l'allocation dynamique est d'éviter de consommer de la
mémoire pour rien, c'est pourquoi je n'adopte pas la solution du tableau.
Si je me casse la tête avec ça, c'est juste pour le fun, je pense qu'en essayant
de faire ce qui existe déjà, on apprend beaucoup.

SpaceClic : Dans le corp de ma classe il existe un pointeur global qui permet
d'avoir un lien avec l'allocation dynamique. Il s'appel Debut dans le bout de
code que j'ai envoyé.

J'ai trouvé la solution au problème et je mettrai prochainement le code sur le
site, si ça vous interesse.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
23 févr. 2005 à 18:35
Consommer de la mémoire pour rien.... pffarf !
Arrêtes voire !

Actuellement les compilateurs sont tellement bons, et les objets "pré-fabriqués" que nous offre le framework tellement optimisés que c'est vraiment parfaitement inutile de faire ce que tu veux. De plus, si les pointeurs te rendent fou de joie, programme plutôt en C/C++ mais pas en C#, je crois que tu t'es tout simplement trompé de langage...

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
RM50Man Messages postés 314 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 20 août 2006
1 mai 2005 à 00:50
i doit falloir utiliser fixed!!!
regarde ds la msdn library!!!

RM50man
0
Rejoignez-nous