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;
}
davy.ai
La línea
rsp = req;
en la funciónprocess
está causando una copia superficial de la estructurareq
asignada arsp
. Esto significa quersp
yreq
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.