Question sur new et delete - C++ - Programmation
Marsh Posté le 27-08-2004 à 00:07:08
a est detruit a la fin de la methode, une variable à la porté du bloc dans lequel elle est declaré, c'est ce que tu voulais savoir ?
Marsh Posté le 27-08-2004 à 00:07:49
rooo merci c tout ce que je voulais savoir!!!
c parfait!!!
mais c sure que ca fait exactement comme si c t un int ou autre chose, je sais pas pourquoi je pensais que c t pas la meme chose
Marsh Posté le 27-08-2004 à 00:24:27
l'adresse contenue par aa est toujours valide en sortie de la methode, mais tu l'affecte à ligne donc ya pas de fuite
Marsh Posté le 27-08-2004 à 02:48:56
euh dites... la :
Code :
|
vu que y a un new pour ligne ca fait comme si j avais fait un delete [] ligne ou non?
Marsh Posté le 27-08-2004 à 12:46:15
A chaque new doit correspondre un delete. Si tu fais :
Code :
|
Il n'y a pas de fuite. a, b, c ce ne sont que des pointeurs, c'est a dire des variables contenant l'addresse de la zone mémoire allouée grace au new. Tu fais un delete sur n'importe lequel ca supprime la zone mémoire, mais il faut en faire un et un seul!!
Marsh Posté le 28-08-2004 à 04:58:59
lol oui je pense bien mais la c'est different car c'est une zone memoire qui existe deja!!
alors que ce passe t'il???
est-ce que vu que je redeclare ligne, tous les ligne[i] superieur a la nouvelle taille on été éffacé ou est ce k ils existents===
Marsh Posté le 28-08-2004 à 07:39:41
new retourne une nouvelle adresse valide à chaque fois, - sauf s'il n'y a plus de bloc de mémoire de taille suffisante pour répondre à la requête d'allocation) auquel cas new retourne 0 ou lanc une exception, à tester après chaque allocation -. Donc si tu fais N fois ligne = new Vecteur[100], ligne va stocker à chaque fois la dernière adresse retournée par new et les adresses précédentes seront écrasées, ce qui fait qu'il ne sera plus possible de faire un delete[] dessus --> fuite mémoire.
La règle est donc de faire systématiquement un delete sur le dernier objet créé, puis de faire (dans la mesure où ça ne casse pas la logique du programme) des delete dans l'ordre inverse de création des objets : le dernier objet créé est le premier à détruire, l'avant-dernier créé le 2é à détruire, etc.
Marsh Posté le 27-08-2004 à 00:04:07
(et ma class Matrice contient int* ligne en private)
ma question : aa existe encore mais il a la meme valeur que ligne mais il ne me sert a rien... comment je fais pour le faire disparaitre???
parce que
ca marche pas car ca me supprime ligne...
---------------
!jb!