Pile en C# [Résolu]

Signaler
Messages postés
20
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
4 janvier 2009
-
Messages postés
20
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
4 janvier 2009
-
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

Messages postés
20
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
4 janvier 2009

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)
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
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
Messages postés
9
Date d'inscription
lundi 26 janvier 2004
Statut
Membre
Dernière intervention
20 avril 2005

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.
Messages postés
20
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
4 janvier 2009

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.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
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
Messages postés
314
Date d'inscription
mercredi 1 novembre 2000
Statut
Membre
Dernière intervention
20 août 2006

i doit falloir utiliser fixed!!!
regarde ds la msdn library!!!

RM50man