[C++]Vector STL et fuite mémoire
Why'l
-
Bichon -
Bichon -
Bonjour,
J'ai un problème de fuite de mémoire dans l'application que je développe en C++ et je soupçonne qu'il provienne de mon utilisation des vector. En particulier, il me semble que les vector -comme tout autre objet- en variables locales sont affectés sur la pile. La mémoire correspondante est donc désallouée à la sortie de la fonction ou du bloc. Par ailleurs, pour chaque new je fais bel et bien un delete. La fuite mémoire provient de cette boucle:
for(int i=0; i<n; i++){
contr=true;
mem =new Choix(nbTable, nbSujPT);
temp=*mem;
delete mem;
mem=0;
tempB=temp.choixBin();//Objet et non pointeur, vecteur de vecteurs
for(int j=0; j<nbTable; j++){
if(coutAct>coutOpt){
coutAct=0;
ressAct=0;
contr=false;
break;
}
else{
progTabl= listTable[j].getProgTabl();//Vecteur de vecteurs
for(int k=0; k<nbTable; k++){
for(int l=0; l<listTable[j].getNbPart();l++){
if(tempB[j][k]!=progTabl[l][k]){
coutAct++;
}
if((tempB[j][k]==1)&&(progTabl[l][k]==1)){
ressAct++;
}
}
}
}
}
if((contr)&&(coutAct<coutOpt)){
res=temp;
coutOpt=coutAct;
ressOpt=ressAct;
coutAct=0;
ressAct=0;
}
}
Elle est typiquement appelée avec n=LONG_MAX et génère un accroissement de 220Ko de mémoire vive utilisée -cf. gestionnaire des tâches- par seconde. Pourriez-vous y jettez un coup d'oeil et me dire s'il vous plaît si vous y détectez une fuite mémoire manisfeste.
Merci,
J'ai un problème de fuite de mémoire dans l'application que je développe en C++ et je soupçonne qu'il provienne de mon utilisation des vector. En particulier, il me semble que les vector -comme tout autre objet- en variables locales sont affectés sur la pile. La mémoire correspondante est donc désallouée à la sortie de la fonction ou du bloc. Par ailleurs, pour chaque new je fais bel et bien un delete. La fuite mémoire provient de cette boucle:
for(int i=0; i<n; i++){
contr=true;
mem =new Choix(nbTable, nbSujPT);
temp=*mem;
delete mem;
mem=0;
tempB=temp.choixBin();//Objet et non pointeur, vecteur de vecteurs
for(int j=0; j<nbTable; j++){
if(coutAct>coutOpt){
coutAct=0;
ressAct=0;
contr=false;
break;
}
else{
progTabl= listTable[j].getProgTabl();//Vecteur de vecteurs
for(int k=0; k<nbTable; k++){
for(int l=0; l<listTable[j].getNbPart();l++){
if(tempB[j][k]!=progTabl[l][k]){
coutAct++;
}
if((tempB[j][k]==1)&&(progTabl[l][k]==1)){
ressAct++;
}
}
}
}
}
if((contr)&&(coutAct<coutOpt)){
res=temp;
coutOpt=coutAct;
ressOpt=ressAct;
coutAct=0;
ressAct=0;
}
}
Elle est typiquement appelée avec n=LONG_MAX et génère un accroissement de 220Ko de mémoire vive utilisée -cf. gestionnaire des tâches- par seconde. Pourriez-vous y jettez un coup d'oeil et me dire s'il vous plaît si vous y détectez une fuite mémoire manisfeste.
Merci,
A voir également:
- [C++]Vector STL et fuite mémoire
- Fuite données maif - Guide
- Mémoire vive - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- C'est un secret bien gardé : ce réglage d'expert peut doper les performances de votre PC - Guide
- Nettoyer memoire iphone - Guide