[C++] Faire des delete correct après des new !

Faire des delete correct après des new ! [C++] - C++ - Programmation

Marsh Posté le 02-03-2003 à 22:24:42    

Bonjour,  
 
J'ai un petit problème concernant la libération de la mémoire allouée dynamiquement avec des new... :  
 

Code :
  1. int *tab1= new int[86*59];
  2. int ** tab2= new int *[86*59];
  3. for (i=0; i<86*59; i++)
  4.      tab2[i] = new int[86*59];
  5. ...
  6. delete[] tab1;
  7. for (i=0; i<86*59; i++)
  8.      delete[] tab2[i];
  9. delete[] tab2;


 
 
Et lorsque je ferme la fenêtre de mon programme, il me dit "Erreur d'exception à l'adresse .....". Je pense donc qu'il s'agit d'un problème avec mes delete et mes new, puisque sans eux il n'y avait aucun problème !! Si j'enleve les delete à la fin, ça plante aussi.  
 
Estimez-vous que mes delete sont corrects ? Avez-vous d'autres idées pour le plantage ?  
 
Je vous remercie par avance !

Reply

Marsh Posté le 02-03-2003 à 22:24:42   

Reply

Marsh Posté le 02-03-2003 à 22:45:28    

l'erreur est ailleurs.

Reply

Marsh Posté le 02-03-2003 à 22:49:38    

benj63 a écrit :

Bonjour,  
J'ai un petit problème concernant la libération de la mémoire allouée dynamiquement avec des new... :  

Code :
  1. int *tab1= new int[86*59];
  2. int ** tab2= new int *[86*59];
  3. for (i=0; i<86*59; i++)
  4.      tab2[i] = new int[86*59];
  5. delete[] tab1;
  6. for (i=0; i<86*59; i++)
  7.      delete[] tab2[i];
  8. delete[] tab2;




 
Si ce n'est pas un programme de test, il y a plusieurs problème de style:
- utilise des constantes
const size_t NB_ITEMS = 86*59;
- utilise des std::vector si possible
 

Reply

Marsh Posté le 02-03-2003 à 23:05:29    

int ** tab2= new int *[86*59];  
  for (i=0; i<86*59; i++)  
       tab2[i] = new int[86*59];
 
bref tu demandes (86*59)*(86*59)*4 ~= 98Mo
 
tu ferais bien de t'assurer du succes de ton allocation en essayant de capturer une exception std::bad_alloc

Reply

Marsh Posté le 02-03-2003 à 23:07:39    

Ah oui, en zffzt, ça commence à faire bcp !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed