2013-05-08 2 views
0

Застежка для этого.MySQL ++ malloc_error_break на mysqlpp :: Query :: store()

Это странно. Я ничего не могу найти в Интернете об ошибке, подобной этой, но это заставляет меня сходить с ума. Надеюсь, вы, ребята, можете пролить свет на этот вопрос.

Я использую MySQL ++ для получения некоторых базовых данных из таблицы. Он прекрасно подключается к базе данных и кажется, что запрос работает, но запуск mysql :: Query :: store() вызывает ошибку malloc.

mysqlpp::Connection conn(false); 
if(conn.connect("demo", "127.0.0.1", "root", "")) // works 
{ 
    std::string sql = "SELECT * FROM `items`"; 
    mysqlpp::Query query = conn.query(sql); // works 
    mysqlpp::StoreQueryResult res = query.store(); // fails 
    if(res) 
    { 
     mysqlpp::StoreQueryResult::const_iterator it; 
     for(it = res.begin(); it != res.end(); ++it) 
     { 
      mysqlpp::Row row = *it; 

      // Do some things 
     } 
    } 
    else 
    { 
     std::cerr<<"Failed to get item list: "<<query.error()<<std::endl; 
     return false; 
    } 
} 
else 
{ 
    std::cerr<<"DB connection failed: "<<conn.error()<<std::endl; 
    return false; 
} 

GDB трассировку дает мне

(gdb) backtrace 
#0 0x00007fff841ed499 in malloc_error_break() 
#1 0x00007fff84117183 in free() 
#2 0x000000010029d66c in mysqlpp::Field::~Field() 
#3 0x0000000100493e4d in mysqlpp::ResultBase::ResultBase (this=0x1004805c8, res=0x100480660, dbd=0x100480660, te=122) at result.cpp:40 
#4 0x0000000100494690 in mysqlpp::StoreQueryResult::StoreQueryResult (this=0x100480730, res=0x100303e30, dbd=0x100802600) at result.cpp:103 
#5 0x0000000100491242 in mysqlpp::Query::store (this=0x3, str=0x100303da0 "SELECT * FROM `items`", len=4298128944) at query.cpp:534 
#6 0x00000001004916dc in mysqlpp::Query::store (this=0x3, [email protected]) at query.cpp:508 
#7 0x00000001004917c3 in mysqlpp::Query::store (this=0x3) at query.cpp:483 
#8 0x0000000100297464 in Load() 
.... 

Load() является функцией этого запущен в.

IF Я делаю запрос дважды (я сделал это из любопытства),

mysqlpp::Query query = conn.query(sql); 
query = conn.query(sql); 
mysqlpp::StoreQueryResult res = query.store(); 

У меня нет ошибки malloc, но я получаю SQL erro г:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM `items`' at line 1 

Мой г ++ версии

g++ (MacPorts gcc47 4.7.3_0) 4.7.3 

Любые идеи? Я раньше использовал MySQL ++, и у меня не было никаких проблем с этим.

Кроме того, эта последовательность Load() находится внутри динамически связанной библиотеки. (У меня есть система загрузки/выгрузки.) Если я закомментирую раздел MySQL, компилирую и загружаю библиотеку, все в порядке. Если я затем раскомментирую раздел, перекомпилирую и перезагружаю библиотеку (с основной программой все еще запущен), запрос выполняется успешно !!! wtf

Любая помощь будет невероятной. Благодаря!!

+0

Мне нравится эта истерика. –

+0

Спасибо, я думаю: P Я попробовал кучу очистки кэша/темп-файла. Перезагрузка моего компьютера не помогла (может также попробовать все, верно?) – Liandri

ответ

0

Такая же проблема. Мое решение, проверьте, есть ли строки:

mysqlpp::StoreQueryResult res = query.store(); // fails 
if(res.num_rows()){ 
... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^