elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con segmentation fault
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con segmentation fault  (Leído 3,120 veces)
puppetz

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Ayuda con segmentation fault
« en: 23 Junio 2014, 17:55 pm »

Buenas, soy nuevo por aca y ando necesitando ayuda para un programa.
La idea del programa es que remplace palabras "prohibidas" ingresadas por usuario en texto que se ingresa como argumento de la funcion. El codigo va algo asi:

Código
  1. #include "my_string.h"
  2.  
  3. int moderar(char a[], int j, char b[])
  4. {
  5.  int k=0,l=0,m=0,w=0,cant=0;
  6.  
  7.  for(k=1; k<j; k++)
  8.  {
  9. for(l=0;l<TAM;l++)
  10. {
  11.  m=my_strequ( &a[k], &b[l]);
  12.  
  13.  if (m=1)
  14.  {
  15. w=my_strlen((&a[l]));
  16. int t=0;
  17.  
  18. for(t=0; t<w; t++)
  19. {
  20.  ((a[l+t]))='x';
  21. }
  22.  }
  23. }
  24. printf("que ***** cuenta: %d",w);
  25. cant=w;
  26.  }
  27.  
  28.  return cant;
  29. }
  30.  
  31. int main (int argc, char* argv[])
  32. {
  33.  char* palprob[TAM];
  34.  int i=0, nuevasx, q=argc;
  35.  
  36.  printf("\nIngresar hasta 10 palabras prohibidas a moderar (pulse ENTER si desea finalizar antes de llegar a 10 palabras)\n");
  37.  
  38.  do
  39.  {
  40. palprob[i]= (char*)calloc(1, sizeof(char*));
  41. gets(palprob[i]);
  42. i++;
  43.  } while((i<10)&&(*(palprob[i-1])!='\0'));
  44.  
  45. nuevasx= moderar(argv, argc, palprob);
  46.  
  47. printf("\nMensaje moderado: \n");
  48.  
  49. for(i=0; i<argc-1; i++)
  50.   printf("%s ", argv[i+1]);
  51.  
  52. printf("\n\nCantidad de caracteres modificados: %d \n",nuevasx);
  53.  
  54.  return 0;
  55. }

Aclaro, en my_string.h se encuentran funciones propias de strequ y strlen y estan funcionando correctamente (ya las probe con otro programa).


« Última modificación: 23 Junio 2014, 18:56 pm por Eternal Idol » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda con segmentation fault
« Respuesta #1 en: 23 Junio 2014, 18:58 pm »

Es tu codigo y deberias depurarlo. La linea 13 esta mal seguro; no se como te compila el resto, los parametros de moderar deben ser dobles punteros a char.

Ej.:
int moderar(char **a, int j, char *b[])

Linea 9 for(l=0;l<TAM;l++)

¿Y si ingreso menos de 10 - TAM asumo - palabras que pasa? Segmentation fault. Tenes que comprobar que haya una cadena valida (deberias inicializar todos los elementos a NULL) o pasar el numero de cadenas ingresadas ... en fin, revisalo todo de nuevo.


« Última modificación: 23 Junio 2014, 19:10 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Ayuda con segmentation fault
« Respuesta #2 en: 23 Junio 2014, 19:05 pm »

Efectivamente como dice eternal, te ayudo "=" es asignación y "==" es comparación
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
puppetz

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con segmentation fault
« Respuesta #3 en: 23 Junio 2014, 19:34 pm »

Se que es mi codigo, y uso el kdbg para depurarlo pero no se como corregirlo, ese es el problema.

Entonces tengo que completar toda la cadena de 10 elementos con ='NULL' ?
Voy a probar las correciones y les digo como me fue
En línea

puppetz

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con segmentation fault
« Respuesta #4 en: 25 Junio 2014, 02:24 am »

Bueno gente, la clave era como dijo idol, los dobles punteros a char y lo del = y el == me lo comi por distraido  :P

Hasta ahora tengo esto de codigo, pero no logra cumplir el objetivo la funcion moderar ya que no logro hacer que las cadenas sean identicas.
Mi funcion de my_strequ funciona en otros programas pero no en este  :(

Código:
#include "my_string.h"

int moderar(char** a, int j, char** b, int c)
{
  int i,k,l,m,w=0,cant=0;
  
  for(k=1; k<j; k++)
  {
for(l=0;l<c;l++)
{
 m=my_strequ(a[k],b[l]);
 
 if (m==1)
 {
w=my_strlen((a[k]));
int t=0;

for(t=0; t<w; t++)
{
 a[k][t]='x';
}
 }
}
cant+=w;
  }

  return cant;
}

int main (int argc, char* argv[])
{
  char* palprob[TAM]; char auxi[30];
  int i=0, nuevasx=0;
  int tama, cantpalprob=0;
  
  
  printf("\nIngresar hasta 10 palabras prohibidas a moderar (pulse ENTER si desea finalizar antes de llegar a 10 palabras):\n");
  
 for (i=0;i<10 && *auxi!='\0';i++)
  {
    gets(auxi);
    cantpalprob=i;
    if (*auxi!='\0')
    {
      tama=my_strlen(auxi);
      palprob[i] = (char*) calloc (tama+1,sizeof(char));
      my_strcpy(palprob[i],auxi);
    }
  }
  
  printf("Palabras prohibidas: ");

  for(i=0; i<cantpalprob; i++)
   printf("\n\t\t\t%s ", palprob[i]);

  nuevasx+= moderar(argv, argc, palprob, cantpalprob);
 
 printf("\nMensaje moderado: \n\t\t\t");
 
 for(i=0; i<argc-1; i++)
   printf("%s ", argv[i+1]);
 
printf("\n\nCantidad de caracteres modificados: %d \n\n",nuevasx);
  
  return 0;
}
« Última modificación: 25 Junio 2014, 02:26 am por puppetz » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda con segmentation fault
« Respuesta #5 en: 25 Junio 2014, 08:01 am »

No, el problema esta en alguna de esas funciones my_, simplemente las reemplace por las standard y el programa funciono. En el bucle estas accediendo a un valor indefinido del primer caracter de auxi en la primera iteracion ...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
puppetz

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda con segmentation fault
« Respuesta #6 en: 26 Junio 2014, 23:44 pm »

El programa funciona a la perfeccion! Gracias a Eternal y a Engel por su ayuda.
Al final el problema estaba en my_strequ.

Saludos a todos
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda con segmentation fault
« Respuesta #7 en: 26 Junio 2014, 23:58 pm »

De nadas  ::)
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Segmentation fault (core dumped)
Programación C/C++
neveldine 3 5,373 Último mensaje 3 Mayo 2012, 17:03 pm
por neveldine
Base de datos SQLite hace un Segmentation Fault al ejecutar sentencia SQL.
Programación C/C++
harry_the_blogger 2 1,842 Último mensaje 19 Noviembre 2014, 16:50 pm
por ivancea96
segmentation fault en mi programa
Programación C/C++
:Luigi 3 4,708 Último mensaje 30 Noviembre 2014, 23:37 pm
por :Luigi
(Ayuda) Segmentation fault sin razón aparente « 1 2 »
Programación C/C++
class_OpenGL 11 5,676 Último mensaje 15 Junio 2016, 06:29 am
por class_OpenGL
Segmentation Fault ayuda
Programación C/C++
GominaTilted 8 3,349 Último mensaje 23 Marzo 2020, 02:08 am
por GominaTilted
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines