Pile en C# [Résolu]

Messages postés
20
Date d'inscription
lundi 21 février 2005
Dernière intervention
4 janvier 2009
- 21 févr. 2005 à 14:22 - Dernière réponse :
Messages postés
20
Date d'inscription
lundi 21 février 2005
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.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
20
Date d'inscription
lundi 21 février 2005
Dernière intervention
4 janvier 2009
- 2 mai 2005 à 08:22
3
Merci
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)

Merci cs_ntrvdonett 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_ntrvdonett
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
- 21 févr. 2005 à 21:19
0
Merci
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
Commenter la réponse de cs_Bidou
Messages postés
9
Date d'inscription
lundi 26 janvier 2004
Dernière intervention
20 avril 2005
- 23 févr. 2005 à 09:31
0
Merci
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.
Commenter la réponse de spaceclic
Messages postés
20
Date d'inscription
lundi 21 février 2005
Dernière intervention
4 janvier 2009
- 23 févr. 2005 à 10:24
0
Merci
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.
Commenter la réponse de cs_ntrvdonett
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
- 23 févr. 2005 à 18:35
0
Merci
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
Commenter la réponse de cs_Bidou
Messages postés
314
Date d'inscription
mercredi 1 novembre 2000
Dernière intervention
20 août 2006
- 1 mai 2005 à 00:50
0
Merci
i doit falloir utiliser fixed!!!
regarde ds la msdn library!!!

RM50man
Commenter la réponse de RM50Man

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.