Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

293
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda