Instancier des objets dans un tableau

Résolu
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 - 27 mai 2009 à 09:32
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 - 27 mai 2009 à 11:44
Bonjour!

Je voudrai savoir si j'alloue de la mémoire aux céllules d'un tableau dont la valeur est null. Voir l'exemple ci-dessous. Et puis comment vider la mémoire des céllules instanciées(les objets du tableau sur lesquels j'ai fait un new...).

private void Form1_Load(object sender, EventArgs e)
{
tab = new Toto[5000];

tab[2] = new Toto();
tab[2].Val1 = 48;
tab[2].Val2 = 53;

tab[3] = new Toto();
}

private void button1_Click(object sender, EventArgs e)
{
label1.Text = tab[4].Val1.ToString();
}

2 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
27 mai 2009 à 10:13
Salut

Je suis pas certain d'avoir bien compris ta première question.
Je te fais tout de même quelques rappels sur les tableaux :
Déjà, tout dépend du type de variables contenues dans le tableau

Par valeur (int, char...)
Le tableau alloue de la mémoire pour n variables (n étant la taille du tableau). Toutes ces variables sont initialisées à 0, et peuvent être directement utilisées :
int[] tab = new int[1];
int val = tab[0] + 5;

Par référence (Presque tous les types non primitifs, classes persos...)
La tableau alloue de la mémoire pour n références (pas pour les objets). Toutes ces références sont initialisées à null. Il faut forcément faire des new pour les utiliser :
object[] tab = new object[1];
string val = tab[0].ToString(); // NullReferenceException
tab[0] = new object();
string val = tab[0].ToString(); // Fonctionne

En ce qui concerne la mémoire, ce n'est pas toi qui la gère en C#, mais le Garbage Collector (GC). Pour simplifier, quand ton programme ne peut plus accéder à un objet (car cet objet n'a plus de référence), le GC se chargera de libérer la mémoire (cependant, tu ne sais pas trop quand). Il n'existe pas de "delete", de "free" ou d'équivalent en C#.
object o = new object(); // Allocation de mémoire
o = null; // Plus de référence sur l'objet créé, donc il sera supprimé automatiquement.

Pour plus d'infos sur le GC, si tu n'es pas anglophobe, tu peux regarder ici : http://msdn.microsoft.com/en-us/magazine/bb985010.aspx.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
1
Rejoignez-nous