Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2628 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Question sur new et delete

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question sur new et delete

n°833468
lunarnet76
Posté le 27-08-2004 à 00:04:07  profilanswer
 

Code :
  1. void Matrice::t(){
  2. int* aa=new int[5];
  3. /*le reste de la fonction ... qui dit a=ligne puis qui fait quelquechose a a qui change toutes ces valeurs genre multiplier par 5*/
  4.         ligne=aa;   
  5. }


(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

Code :
  1. delete [] a;

ca marche pas car ca me supprime ligne...


---------------
!jb!
mood
Publicité
Posté le 27-08-2004 à 00:04:07  profilanswer
 

n°833472
cris56
Posté le 27-08-2004 à 00:07:08  profilanswer
 

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 ?

n°833473
lunarnet76
Posté le 27-08-2004 à 00:07:49  profilanswer
 

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


Message édité par lunarnet76 le 27-08-2004 à 00:08:56

---------------
!jb!
n°833501
cris56
Posté le 27-08-2004 à 00:24:27  profilanswer
 

l'adresse contenue par aa est toujours valide en sortie de la methode, mais tu l'affecte à ligne  donc ya pas de fuite

n°833641
lunarnet76
Posté le 27-08-2004 à 02:48:56  profilanswer
 

euh dites... la :

Code :
  1. void Matrice::recomposer(int l,int c){
  2. Fr* tab=new Fr[l*c];
  3. int t=0;
  4. for (int i=0;i<nl;i++){
  5.  for (int j=0;j<nc;j++){
  6.   tab[t]=ligne[i].retelem(j);t++;
  7.  }
  8. }
  9. nc=c;
  10. nl=l;
  11. ligne=new Vecteur[l]; // ICI ICI ICI ICI
  12. Vecteur ct(c);
  13.  for (i=0;i<nl;i++){
  14.   ct.identiteiser();
  15.    ligne[i]=ct;
  16.  }
  17.  t=0;
  18. for (i=0;i<nl;i++){
  19.  for (int j=0;j<nc;j++){
  20.   ligne[i].vect(j,tab[t]);t++;
  21.  }
  22. }
  23. }


vu que y a un new pour ligne ca fait comme si j avais fait un delete [] ligne ou non?


Message édité par lunarnet76 le 27-08-2004 à 02:50:15

---------------
!jb!
n°833958
Ace17
Posté le 27-08-2004 à 12:46:15  profilanswer
 

A chaque new doit correspondre un delete. Si tu fais :

Code :
  1. int* a;
  2. int* b;
  3. int* c;
  4. a = new int[l];
  5. b = a;
  6. c = a;
  7. // opérations sur la zone mémoire allouée
  8. delete [] c;


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


Message édité par Ace17 le 27-08-2004 à 12:47:05
n°834959
lunarnet76
Posté le 28-08-2004 à 04:58:59  profilanswer
 

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===


---------------
!jb!
n°834961
el muchach​o
Comfortably Numb
Posté le 28-08-2004 à 07:39:41  profilanswer
 

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.


Message édité par el muchacho le 28-08-2004 à 07:43:13

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Question sur new et delete

 

Sujets relatifs
question concernant la fonction copy()[BATCH-DOS]question a l'utilsateur et enregistrement de variable??
question sur le C++[java] Question de gros noob sur l'allocation mémoire.
Question de focusQuestion sur la GD de PHP
Question con sur la mise à jour de PHP ![C++] Question rapide...Parcours de boucle...Quel est le plus rapide?
Une petite question sur delete...[C++] question de delete sur une hiérarchie de classe
Plus de sujets relatifs à : Question sur new et delete


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)