Allocation dynamique foireuse.
Bonsoir,
Cela ne dev(r)ait pas arriver, mais bon...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
template<typename Protocol>
void server_engine<Protocol>::visit(session<Protocol>* session, socket_impl<Protocol>& socket, handlers::change_handler_server<Protocol>* ch)
{
std::cout << "session= " << session<<std::endl; // Adresse valide
//session = new sessions::server<Protocol>(socket, ch->some_id); // Appel du constructeur: OK
//delete session; // Appel du destructeur: OK
auto s2 = new sessions::server<Protocol>(socket, ch->some_id); //Appel du constructeur: OK, mais dans le constructeur, si je fais std::cout<<this<<std::endl; j'ai une adresse qui ressemble à celle ci-après.
std::cout << "s2= " << s2 << std::endl; // Mauvaise adresse, du style... 0x46684fe648464abd64684....
session = s2; // Evidemment, pas mieux ...
std::cout << "session= " << session << std::endl; // Pas mieux ...
std::cout << "s2= " << s2 << std::endl; // Pas mieux ...
} |
Le but, étant d'écraser le pointeur session, et de le remplacer avec un pointeur tout frais :)
Le problème n'est donc pas sur le remplacement du vieux pointeur toujours bon, mais sur la création du nouveau, et je ne vois pas pourquoi cela peut foirer.
Avez-vous un idée ?
Ensuite, juste au cas où, le pointeur recu par la fonction, est un pointeur contenu dans une std::map<k, session*>. Y a t il un risque ?!
Où faut-il que je passe par quelque chose du style iterator->second = new_ptr; ?!
Merci,
nico