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
Ir a la versión completa