Programación General > C/C++

 no consigo entender este error, por favor

<< < (2/3) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa