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.
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)
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!
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.
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...