В этом коде есть серьезная ошибка:
mysqlpp::UseQueryResult res;
{
mysqlpp::Query query = conn.query();
query << "SELECT USER();";
res = query.use();
row = res.fetch_row();
}
Вы не используете все наборы результатов. В MySQL хранимые процедуры, которые возвращают данные, возвращают как минимум два отдельных набора результатов: первый - это запрашиваемые вами результаты, а второй - информация о состоянии самого вызова. См. examples/multiquery.cpp
в исходном дистрибутиве MySQL ++ для правильного решения этой проблемы. Также см. раздел 3.16 в руководстве пользователя MySQL ++.
Основным следствием этого является то, что последующие запросы по тому же соединению не будут выполнены.
Я думаю, что повреждение вашей памяти на самом деле является вторичным эффектом, и что основная проблема заключается в игнорировании попыток MySQL C API, чтобы сказать вам, что вы пытаетесь выполнить два перекрывающихся запроса в одном соединении, потому что вы этого не сделали потреблять весь первый набор результатов. Из того небольшого кода, который вы выложили, я вижу, что вы игнорируете возвращенные коды ошибок, поэтому, если вы также отключили исключения MySQL ++, ваш код будет полностью игнорировать эту ошибку и беспечно продолжать топтать все, что не должно ' т.
Кстати, пожалуйста, потеряйте точку с запятой в запросе. Это не требуется с C API, и может вызвать путаницу, особенно перед лицом нескольких запросов. Используйте точку с запятой только для разделения нескольких операторов в одном запросе.