parametros - para que sirven los punteros en c++



Fallo de segmentación en C con malloc (2)

Cambia esto:

if (head = NULL)

a

if (head == NULL)

== operador verifica la igualdad entre dos expresiones.
= es un operador de asignación. Asigna el valor en / de RHS a variable en LHS.

Además, como se sugirió anteriormente, asigne memoria para ip_address o declare como una matriz de caracteres.

https://ffff65535.com

Recibo un error de segmentación para el siguiente escenario: cuando leo de un archivo una lista de direcciones IP, guardo la DIRECCIÓN IP y el puerto en una lista de enlaces. Como mis ciclos de while para lectura de archivos se repiten, según la lógica de la lista de enlaces: cuando vuelvo a malloc mi puntero temporal, me encuentro con una falla de segmentación.

Encuentre a continuación el fragmento de código:

    struct woker_conf
        { 
           int port; 
           char *ip_address;
           struct worker_conf *next;
        } *head;

    void open(int8_t nbrwrk)
       {
          FILE *fp = NULL;
          char line[1024] = {0};
          int i = 1;
           char *ch;  
          struct worker_conf *config, *temp;
          head = NULL;
          fp = fopen("abcd.txt","r");
          if (fp == NULL)
              exit(1);

          while (fgets(line, sizeof line, fp) != NULL && i<=nbrwrk )    
             {  
                ch = strtok(line,"=");
                while (ch != NULL)
                  {
                     if (strstr(ch,"worker") ! = NULL)
                       {
                     // temp = NULL;-> segmentation fault with and without this line  
                        temp = (struct worker_conf *)malloc(sizeof(struct worker_conf));
                         ch = strtok(NULL," ");

                         strcpy(temp->ip_Address, ch);
                         if (head == NULL) 
                            { head = temp;
                               head->next = NULL;
                             }


                      config = (struct worker_conf *)head;                              

                      while (config->next != NULL)
                          config = config->next;
                      config->next = temp;
                      config = temp;
                      config->next =  NULL;
                    }
              }
         }
  }

El formato de archivo es:

worker1 = 10.10.10.1 worker2 = 10.10.10.2 (tanto worker1 como worker2 en diferentes líneas)

Mientras lee worker1 no hay problema en la ejecución. Sin embargo, cuando el archivo está en la línea 2 - worker2, el código da un error de segmentación durante malloc of string.
¿Puedes ayudarme con esto?


strcpy(temp->ip_Address, ch);

Deberías malloc temp-> ip_address before strcpy





malloc