Для сетевой части используется boost asio. На Windows(MSVC) выскакивает exception: "
Кусок кода:
void Send()
{
std::stringstream buffer;
async_write(*this->socket,
boost::asio::buffer(buffer.str()),
boost::bind(&Socket::HandleWrite,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
Поверхностно я понимаю, что локальная переменная buffer уничтожается и это каким-то образом приводит к exception. Но при этом данные посылаются, потери не наблюдаю, хотя не уверен. Самое интересное, что на Linux(gcc) такого exception нету. Можете подробнее объяснить почему так происходит?
Ну, в общем-то вы верно понимаете, что проблема связана с тем, что строка приказывает долго жить до того, как выполняется запись ее содержимого.
Сообщение вы получаете потому, что работаете в отладочном режиме (если перейдете к релизу, этого сообщения не будет... но сама ошибка не исчезнет).
Данные посылаются потому, что это UB, и возможно, что память буфера просто еще никем не затерта в этот момент, и вы просто передаете то, что продолжает лежать по указанному адресу. Но гарантии, что оно там будет лежать всегда при вызове вашей функции - нет.
Мне удалось удовлетворить вашу любознательность? :)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Имеются объекты клиент и билетыСвязь 1 ко многим
Есть некая сущность Report и одна из ее реализаций:
Проблема в следующем, при выполнении кода метод (метод 1) вызывает другой метод (метод 2), но что-бы не увеличивать код нужно вызвать из "метода...