Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Fallo de segmento al compilar mi programa

Estas en el tema de Fallo de segmento al compilar mi programa en el foro de C/C++ en Foros del Web. Un programa que cuente cuantas vocales hay en una cadena de texto introducida por el usuario. No sé que tiene este algoritmo, funciona bien en ...
  #1 (permalink)  
Antiguo 21/04/2011, 23:44
 
Fecha de Ingreso: octubre-2010
Mensajes: 25
Antigüedad: 13 años, 6 meses
Puntos: 2
Pregunta Fallo de segmento al compilar mi programa

Un programa que cuente cuantas vocales hay en una cadena de texto introducida por el usuario.

No sé que tiene este algoritmo, funciona bien en Windows (usando Dev-C++) y cuando entro a GNU/Linux y lo compilo me da Fallo de segmento. ¿A qué se debe? He analizado bien lo que hice y no encuentro el por qué, se compila correctamente, pero cuando introduzco algo se finaliza.

¡Alguien que me ayude por favor!

Código C++:
Ver original
  1. #include <iostream>
  2. #define TALLA 80
  3. using namespace std;
  4.  
  5. int main(){
  6.     char vocales[6] = {'a', 'e', 'i', 'o', 'u', '\0'};
  7.     char entrada[TALLA];
  8.     unsigned short contador = 0;
  9.  
  10.     cout << "CONTANDO LAS VOCALES EN LA CADENA INTRODUCIDA" << endl;
  11.     cout << "Escribe: ";
  12.     cin.getline(entrada, TALLA);
  13.  
  14.     for(short c = 0; entrada[c]; c++){
  15.         for(short j = 0; vocales[c]; j++){
  16.             if(entrada[c] == vocales[j]){
  17.                 contador++;
  18.             }
  19.         }
  20.     }
  21.  
  22.     cout << "Tiene " << contador << " vocales" << endl;
  23.     return 0;
  24. }
  #2 (permalink)  
Antiguo 22/04/2011, 09:33
 
Fecha de Ingreso: mayo-2007
Mensajes: 54
Antigüedad: 16 años, 11 meses
Puntos: 1
Respuesta: Fallo de segmento al compilar mi programa

Hola,

En el segundo for usas vocales[c] y c en algun momento excede las 6 posiciones que tiene el arreglo vocales. Deberias usar vocales[j]. Igualmente, el primer for lo haria ; c > 6; y el segundo ; j > tamaño de la cadena;
  #3 (permalink)  
Antiguo 22/04/2011, 09:47
 
Fecha de Ingreso: octubre-2010
Mensajes: 25
Antigüedad: 13 años, 6 meses
Puntos: 2
De acuerdo Respuesta: Fallo de segmento al compilar mi programa

Cita:
Iniciado por cobolero_poseido Ver Mensaje
Hola,

En el segundo for usas vocales[c] y c en algun momento excede las 6 posiciones que tiene el arreglo vocales. Deberias usar vocales[j]. Igualmente, el primer for lo haria ; c > 6; y el segundo ; j > tamaño de la cadena;
Al parecer ya me está comenzando a fallar la vista.

No me habia dado cuenta que coloqué mal el contador en el índice. Ahora tengo otra duda... ¿Por qué en Windows no tenia problemas al ejecutar el programa? ¿Es ineficiencia en la seguridad del sistema o qué?

Muchas gracias de antemano
  #4 (permalink)  
Antiguo 22/04/2011, 14:45
 
Fecha de Ingreso: agosto-2010
Mensajes: 153
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Fallo de segmento al compilar mi programa

lo que pasa es que no se garantiza que te avise el compilador cuando te salesde los limites del arreglo eso pasa en C, en C++ y JAVA creo que si hay alguna seuridad de eso, solo revisa tu compiador en los warnings, el compilador atrapa el error, por eso tienes que tener mucho cuidado con los limites de los arreglos, creeme que es un error que si no lo intentas de evitar programando con cuidado, te va a dar muchos dolores de cabeza y no cuando sean fallas de segmentacion por que eso si te lo avisa, si nno cuando tengas contadores incorrectos que hacen referencia a arreglos jejej chao cuidate

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:24.