Programación General > C/C++

 donde está el error?

(1/1)

pacorubio77:
Hola, no consigo ver donde está el fallo de segmentacion que me da, me pueden ayudar?


--- Código: C++ ---  bool TPoro::EsMayuscula(char c){   bool mayuscula=false;   if ( (c>='A') && (c<='Z') ){       mayuscula=true;   }return (mayuscula);} void TPoro::Convertir(char *col){   int i=0;  int tam=0;       if(col!=NULL){          cout<<"col es distinto de NULL"<<endl;          tam=strlen(col);          cout<<tam<<endl;          char *cad1;          while(i<tam){        cout<<"col[i] "<<col[i]<<endl;        if( EsMayuscula(col[i]) ){            cout<<"es mayus"<<endl;            cad1[i]=col[i]+32;            cout<<cad1[i]<<endl;         }        else{            cout<<"no es mayus"<<endl;            cad1[i]=col[i];         }          i++;          }          cout<<"fuera del while"<<endl;          cad1[tam]='';          strcpy(color,cad1);          cout<<color<<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);        //strcpy(color,col);        cout<<"salgo?"<<endl;    //}    }    else{        color=NULL;        return;    }     //cout<<"salgo de la funcion"<<endl;    //cout<<"color "<<color<<endl; }    
Tengo que decir que las funciones Convertir (pasa de mayusculas a minusculas) y Mayuscula comprueba si es o no mayuscula el caracter.
y dichos metodos me los he implementado en la parte pública.

pero cuando llega fuera de Convertir..pega el cascazo....

Me ayudan?

diego.martinez:

--- Código: C++ --- char *cad1;   <--------------- AQUI! lo inicializas apuntando a vaya a saber usted donde          while(i<tam){        cout<<"col[i] "<<col[i]<<endl;        if( EsMayuscula(col[i]) ){            cout<<"es mayus"<<endl;            cad1[i]=col[i]+32; <-------------------- y aqui pones un bonito valor en un  offset de cad1 que produce un error de acceso a memoria  
Estas usando un puntero sin inicializar.
Deberias, o bien poner (para inicializar con 100 bytes por ejemplo):

 char cad1[100]; //e inicializar con 100 bytes
o
 char *cad1=(char*)malloc(sizeof(char)*100);
o
char * cad1=new char[100];  

El error se produce al salir de la funcion por que es cuando se "limpia" todo lo que hayas usado en la función, y claro, es entonces cuando detecta que has puesto datos donde no debias.

 :hola:

pacorubio77:
Hola, quiero que veais como lo he arreglado, y me deis vuestra aceptacion.


--- Código: C++ --- bool TPoro::EsMayuscula(char c){   bool mayuscula=false;   if ( (c>='A') && (c<='Z') ){       mayuscula=true;   }return (mayuscula);} void TPoro::Convertir(char *col,char *color){   int i=0;  int tam=0;       if(col!=NULL){          cout<<"col es distinto de NULL"<<endl;          tam=strlen(col);          cout<<tam<<endl;          //char *cad1;          while(i<tam){        cout<<"col[i] "<<col[i]<<endl;        if( EsMayuscula(col[i]) ){            cout<<"es mayus"<<endl;            color[i]=col[i]+32;            cout<<color[i]<<endl;         }        else{            cout<<"no es mayus"<<endl;            color[i]=col[i];         }          i++;          }          cout<<"fuera del while"<<endl;          color[tam]='';          //strcpy(color,cad1);          cout<<color<<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; }  
Decirme vuestras opiniones

Navegación

[0] Índice de Mensajes

Ir a la versión completa