Instancier des objets dans un tableau [Résolu]

Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
Dernière intervention
9 septembre 2010
- - Dernière réponse : LordOfTheShadow
Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
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();
}
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
3
Merci
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 ! -

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de krimog
Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
Dernière intervention
9 septembre 2010
0
Merci
Merci krimog you succeded to teach me how to handle the GC. :-))
Commenter la réponse de LordOfTheShadow

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.