Programación General > C/C++
no consigo entender este error, por favor
Eternal Idol:
Si en el constructor estas haciendo simplemente una asignacion a un puntero a char entonces esta claro, tendras un puntero nulo y si lo desreferencias dara una excepcion ... podes pasale una cadena vacia "" en lugar de NULL ... o tener un buffer estatico ... hay varias formas de solucionarlo digamos.
pacorubio77:
--- Cita de: "Eternal Idol" ---Si en el constructor estas haciendo simplemente una asignacion a un puntero a char entonces esta claro, tendras un puntero nulo y si lo desreferencias dara una excepcion ... podes pasale una cadena vacia "" en lugar de NULL ... o tener un buffer estatico ... hay varias formas de solucionarlo digamos.
--- Fin de la cita ---
Hola, no consigo entender lo que usted me dice, pero el constructor por defecto que tengo es
TPoro::TPoro(int px,int py,double vol,char *col){
int tam=strlen(col)+1;
x=px;
y=py;
volumen=vol;
color=new char[tam];
if(color !=NULL){
strcpy(color,col);
}
//else{
// return;
//}
}
y el constructor copia
TPoro::TPoro(const TPoro &po){
int tam=strlen(po.color)+1;//saco el tamaño de la cadena de caracteres
x=po.x;
y=po.y;
volumen=po.volumen;
color=new char[tam];
if(color !=NULL){
strcpy(color,po.color);
}
//else{
// return;
//}
}
como ven hay la ultima parte comentada en los dos metodos es que dudo cuando le meto NULL.
lo estoy haciendo bien?
Eternal Idol:
Esto ya esta mal:
int tam=strlen(col)+1;
Ahi si le pasas NULL hay una excepcion como te dije, no es una cadena es un puntero nulo ...
pacorubio77:
correcto, es uno de los fallos, pero es que me sigue dando errores con la siguiente correcion, he modificado los constructores
--- Citar ---
TPoro::TPoro(int px,int py,double vol,char *col){
int tam;
x=px;
y=py;
volumen=vol;
color=new char[strlen(col)+1];
if(color==NULL){
return;
}
//if(color !=NULL){
strcpy(color,col);
//}
//else{
// return;
//}
}
TPoro::TPoro(const TPoro &po){
//int tam=strlen(po.color)+1;//saco el tamaño de la cadena de caracteres
x=po.x;
y=po.y;
volumen=po.volumen;
color=new char[strlen(po.color)+1];
if(color ==NULL){
return;
//strcpy(color,po.color);
}
strcpy(color,po.color);
//else{
// return;
//}
}
--- Fin de la cita ---
y pasando el gdb me dice lo siguiente
Program received signal SIGSEGV, Segmentation fault.
0x08048fe1 in TPoro (this=0xbfa81a0c, px=4, py=5, vol=20.353000000000002,
col=0x0) at lib/TPoro.cpp:41
41 color=new char[strlen(col)+1];
ese es el error que me da
Eternal Idol:
col sigue siendo un puntero nulo ............................. lo primero que hara strlen es *col para ver donde termina la cadena .....
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa