mysqlpp::StoreQueryResult zu klein?
-
Hallo,
ich hab eine ganz normale select operation aber bekomme folgende fehlermeldung:
Eine Ausnahme (erste Chance) bei 0x6662bc0b in Login.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xccccccec.
das selbe passiert ja auch wenn man ein array hat und den speicher "überschreitet"...
beispiel:int blub[3]; blub[4]=8;
dann passiert ja auch ein "crash"
mein code:mysqlpp::StoreQueryResult res = db.Query("select * from servers").store(); cout<<"Server:\n"<<atoi(res[i]["id"])<<endl<<strlen(res[i]["name"])<<endl<<atoi(res[i]["users_current"])<<endl<<atoi(res[i]["users_max"])<<endl<<atoi(res[i]["state"])<<endl;
wie gesagt es "crasht" dann unzwar genau an der stelle...
was hab ich falsch gemacht?
-
Wie sieht denn Dein i aus?
Wenn Du über alle zurückgegebenen Zeilen drüberiterieren möchtest, musst Du sowas in der Art machen:
typedef mysqlpp::StoreQueryResult::list_type::size_type size_type; for (size_type i=0; i<res.num_rows(); ++i) do_something(res[i]);
-
ja ich war j auch in einer for() schleife (außer das mein i ein unsigned int war sah es genau so aus) aber ich bekomm trotzdem diese fehlermeldung
jetzt nochmal kompletttypedef mysqlpp::StoreQueryResult::list_type::size_type size_type; // hab ich jetzt einfach mal davor geschrieben (wegen dem tipp eben) mysqlpp::StoreQueryResult res = db.Query("select * from servers").store(); for(size_type i = 0; i < res.num_rows(); ++i) { do_something(atoi(res[i]["id"])); do_something(strlen(res[i]["name"])); do_something(atoi(res[i]["users_current"])); do_something(atoi(res[i]["users_max"])); do_something(atoi(res[i]["state"])); }
-
Hoppla, bist Du Dir sicher, dass der operator[] eine Map oder so zurückgibt?
Kann mich nicht mehr genau erinnern, aber spricht man das nicht beide Male mit einem size_t oder so an?
Also eben res[0][2] für die dritte Spalte der ersten Zeile oder so.
-
Nein, gerade nachgelesen, mein Fehler, sollte so eigentlich passen.
Schreib mal ein bisschen Fehlerbehandlungscode, vielleicht schlägt schon irgendwas vorher fehl.
Also sowas wie
if (!res) std::cerr << "Fehler!";
-
also mit res is alles in ordnung... res.num_rows(); stimmt auch... es gibt den richtigen wert aus. die frage ist jetzt wo is denn jetzt der fehler?
Edit:
Anscheinend will mysql nicht mit meiner anwendung communizieren... mit dem query browser funktioniert auch alles... ich melde mich auch als root an also muss es anscheinend mit der verbindung von der datenbank zu meiner anwendung zu tun haben. vielleicht hat es auch mit vista zu tun (meine vermutung ist, dass vista die verbindung stört)
-
Schalte mal die Firewall aus. Checke auch, dass MySQL wirklich Netzwerkverbindungen annimmt etc. (Also auf skip-networking oä. achten.)