es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

corrupción de memoria después de la copia de estructura

Nota: El siguiente código está causando corrupción de memoria en la función de proceso, donde se asigna req a rsp. No entendí lo que sucedió aquí. Después de eliminar “rsp = req”, luego funciona. ¿Esta asignación causará una copia superficial de las estructuras en req? ¿Las estructuras req y rsp apuntan a la misma memoria aquí?

    struct info
    {
       uint8_t                     id;
       uint64_t                    post_id;
       uint64_t                    time_id;
    };

     struct updates
     {
       uint32_t                  id;
       uint32_t                  fcn;
       uint16_t                  icp;
       uint64_t                  num_oh;
       uint64_t                  num_rna;
       bool                      is_rbn;
    };


     struct rbn_rel_info
     {
        uint16_t                    icp;
        uint32_t                    fcn;
        info               relation;
        uint32_t                     id_length;
        uint32_t                     id;
     };

    struct rbn_info
     {
        uint16_t                  icp;
        uint32_t                  fcn;
     };

   struct ind_info
    {
       info           _info;

       uint16_t       num_rbn;
       rbn_info       _rbn_info[32];

       uint16_t       num_rel;
       rbn_rel_info   rel[32];

       uint8_t          nums;
       updates     _updates[32];
    };

void process(struct ind_info req)
{
    struct ind_info rsp = req;
    //procesar req y enviar rsp
    enviar_rsp(rsp);
}

int main()
{

   struct ind_info req = {};
    process(req);

    return 0;
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    La línea rsp = req; en la función process está causando una copia superficial de la estructura req asignada a rsp. Esto significa que rsp y req están apuntando a la misma ubicación de memoria, lo que provoca corrupción de memoria cuando se realizan modificaciones en alguno de ellos. Eliminar esta línea soluciona el problema al evitar la copia superficial. Es importante tener en cuenta que se debe evitar la copia superficial para prevenir la corrupción de memoria en el futuro.

Comments are closed.