cs_ntrvdonett
Messages postés20Date d'inscriptionlundi 21 février 2005StatutMembreDernière intervention 4 janvier 2009
-
21 févr. 2005 à 14:22
cs_ntrvdonett
Messages postés20Date d'inscriptionlundi 21 février 2005StatutMembreDerniè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.
cs_ntrvdonett
Messages postés20Date d'inscriptionlundi 21 février 2005StatutMembreDerniè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)
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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!
cs_ntrvdonett
Messages postés20Date d'inscriptionlundi 21 février 2005StatutMembreDerniè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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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...