Hola, la ejecucion de mi programa funciona bien, pero creo que no estoy haciendo bien algun delete.
Por ejemplo yo tengo mi main
int main(){
TPoro c4(4,5,20.35,"YElloW");
cout<<c4<<endl;
return 0;
}
el valgrind me dice lo siguiente:
==14577== Mismatched free() / delete / delete []
==14577== at 0x402599A: operator delete(void*) (vg_replace_malloc.c:342)
==14577== by 0x8049044: TPoro::~TPoro() (TPoro.cpp:151)
==14577== by 0x8048993: main (tad.cpp:107)
==14577== Address 0x42c4028 is 0 bytes inside a block of size 7 alloc'd
==14577== at 0x402630E: operator new[](unsigned int) (vg_replace_malloc.c:268)
==14577== by 0x8048CE1: TPoro::TPoro(int, int, double, char*) (TPoro.cpp:92)
==14577== by 0x8048960: main (tad.cpp:10)
==14577==
==14577== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 17 from 1)
==14577== malloc/free: in use at exit: 0 bytes in 0 blocks.
==14577== malloc/free: 1 allocs, 1 frees, 7 bytes allocated.
==14577== For counts of detected errors, rerun with: -v
==14577== All heap blocks were freed -- no leaks are possible.
yo creo que puede ser en uno de los siguiente metodos
TPoro::~TPoro(){
//cout<<"paso al destructor"<<endl;
x=0;
y=0;
volumen=0.0;
//comprobaré que color es distinto de NULL, para asegurarme y hacer delete
if(color !=NULL){
delete color;
color=NULL;
}
//color=NULL; //me curo en salud y me aseguro para ponerlo a NULL;
//cout<<"salgo del destructor"<<endl;
}
TPoro::TPoro(int px,int py,double vol,char *col){
int tam;
//cout<<"a la funcion"<<endl;
x=px;
y=py;
volumen=vol;
if(col!=NULL){
color=new char[strlen(col)+1];
//cout<<"COL "<<color<<endl;
if(color==NULL){
return;
}
//if(color !=NULL){
//cout<<"llego aqui"<<endl;
Convertir(col,color);
//strcpy(color,col);
//cout<<"salgo?"<<endl;
//}
}
else{
color=NULL;
return;
}
//cout<<"salgo de la funcion"<<endl;
//cout<<"color "<<color<<endl;
}
No libero bien la memoria?
me pueden ayudar?