Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

290
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!