Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

287
Vistas
Error de segmentación al dividir una matriz que contiene una dirección IP

Después de dividir la dirección IP, quiero seleccionar el último elemento, es decir, 15 e incrementarlo, pero después de obtener 192 en buff cuando pasa al primer caso, ¡obtengo una falla de segmentación!

¿Por qué no puede ir más allá? ¿Cuál puede ser el problema?

 int main(int argc, char** argv) { char str[] = "192.168.10.15"; char str1[12]; char *str2, *str3, *str4, *str5; unsigned char bytes[4]; int i = 0; int lastelem; char* buff = (char *)malloc(20); buff = strtok(str,"."); while (buff != NULL) { printf("%s\n",buff); switch(i) { case 0: str2=buff; break; case 1: str3=buff; break; case 2: str4=buff; break; case 3: str5=buff; break; } lastelem=atoi(str5); sprintf(str5, "%d",lastelem); bytes[i] = (unsigned char)atoi(buff); buff = strtok(NULL,"."); i++; } return 0; }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

En su código, en la primera iteración ( o, en ese caso, en cualquier otra iteración, excepto cuando se alcanza el case 3 )

 lastelem=atoi(str5);

str5 no está inicializado, por lo que está invocando un comportamiento indefinido .

Debe usar str5 solo después de que se haya asignado. Puede usar una bandera, si lo desea, para marcar el acierto en el case 3: o coloque el código debajo del bloque del case .

Además, no necesita asignar memoria a buff , ya que la sobrescribe con el puntero devuelto por strtok() . Eso crea una pérdida de memoria .

over 4 years ago · Santiago Trujillo Denunciar

0

Mueva sus cosas relacionadas con str5 , dentro de case3

 case 3: str5 = buff; lastelem = atoi(str5); sprintf(str5, "%d", lastelem); break;

Además, no es necesario asignar memoria para mejorar, no está copiando algo en él, solo está señalando algo, esto causará una pérdida de memoria en su código.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda