MySQL Crash bei nicht vorhandenem Datensatz
-
Hallo,
ich habe mich ein wenig mit MySQL in C++ befasst.
std::string MySQL_getId(MYSQL conn, std::string nName) { MYSQL_RES *res; MYSQL_ROW row; std::stringstream ss; ss << "SELECT * FROM `user` WHERE `name` = '" << nName << "'"; std::string query = ss.str(); if(!mysql_query(&conn, query.c_str())) { res = mysql_store_result(&conn); if(res != NULL) { while ((row = mysql_fetch_row(res)) != NULL) { std::cout << "Fertig"; mysql_free_result(res); return row[0]; } } else { // Hier stürzt es ab mysql_free_result(res); return "0"; } } }
Wenn ich die Id von einem Account abrufe, der existiert, funktioniert es.
Nehme ich jedoch "Testacc123", der nicht existiert: Crash.
Weiß jemand woran das liegt?MfG
-
guten morgen,
ich tippe mal darauf, dass mysql_store_result() speicher allokiert, der durch mysql_free_result() wieder freigegeben wird.
du gibst hier auch in dem fall speicher frei, auch wenn nichts allokiert wurde.
-
Hey,
erstmal danke für die Antwort.
Auch wenn ich das "mysql_free_result(res);" entferne, crashed es.
Hab es aber mal wieder entfernt, hatte ich nur zu Testzwecken dort stehen.Weitere Vorschläge?
-
Und wo bitte crashed es wenn Du die Zeile entfernst?
Doch nichtmehr dort...
Bitte mehr Infos, bevor Du mehr Vorschläge verlangst...
-
bool check(MYSQL conn) { // Id rausfinden std::string sId = MySQL_getId(conn, name); //Entweder crashed es hier int id = atoi(sId.c_str()); std::cout << id << name; if(id != 0) { if(name == MySQL_getName(conn, id)) { return true; } else { return false; } } } std::string MySQL_getId(MYSQL conn, std::string nName) { MYSQL_RES *res; MYSQL_ROW row; std::stringstream ss; ss << "SELECT * FROM `user` WHERE `name` = '" << nName << "'"; std::string query = ss.str(); if(!mysql_query(&conn, query.c_str())) { res = mysql_store_result(&conn); if(res != NULL) { while ((row = mysql_fetch_row(res)) != NULL) { std::cout << "Fertig"; mysql_free_result(res); return row[0]; } } else { // Oder hier // Das d wird bereits schon nicht mehr ausgegeben std::cout << "d"; return "0"; } } }
-
Kann leider nicht editieren, da unregistriert. Sorry dafür.
Debugger sagt übrigens folgendes:
Unbehandelte Ausnahme bei 0x0082B628 (msvcr100d.dll) in Lizenzsystem.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xCCCCCCCC
-
So, habe den Fehler gefunden.
Kann geschlossen werden.