Aloha,
ich bin gerade dabei, während eines kleinen privaten Projekts C++ zu vertiefen. Dabei versuche ich von einer MySQL-Datenbank Daten auszulesen und als xml auszugeben.
Das Laden der Daten funktioniert soweit, und da ich verschiedene Datentypen benutze, verbinde ich diese per std::stringstream, den ich dann am Ende in einen String umwandeln möchte. Auch das funktioniert, doch sobald ich den String als Rückgabewert nutzen möchte, kriege ich folgenden Fehler:
Mein Quelltext sieht wie folgt aus (Ausschnitt):
Die couts sind nur dazu da, um den Fehler zu lokalisieren, die dazugehörige Ausgabe:
Hat jemand eine Idee, warum das beim return-Statement den Fehler wirft?
ich bin gerade dabei, während eines kleinen privaten Projekts C++ zu vertiefen. Dabei versuche ich von einer MySQL-Datenbank Daten auszulesen und als xml auszugeben.
Das Laden der Daten funktioniert soweit, und da ich verschiedene Datentypen benutze, verbinde ich diese per std::stringstream, den ich dann am Ende in einen String umwandeln möchte. Auch das funktioniert, doch sobald ich den String als Rückgabewert nutzen möchte, kriege ich folgenden Fehler:
Code:
*** glibc detected *** /home/christoph/cpp/tippspiel/AppServer/Debug/AppServer: double free or corruption (!prev): 0x0000000000cd1740 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7fdee3e90b96]
/usr/lib/libmysqlpp.so.3(_ZN7mysqlpp8DBDriverD1Ev+0xcc)[0x7fdee470b71c]
/usr/lib/libmysqlpp.so.3(_ZN7mysqlpp8DBDriverD0Ev+0x9)[0x7fdee470b7f9]
/usr/lib/libmysqlpp.so.3(_ZN7mysqlpp10ConnectionD1Ev+0x2a)[0x7fdee4705d3a]
/home/christoph/cpp/tippspiel/AppServer/Debug/AppServer[0x402da5]
/home/christoph/cpp/tippspiel/AppServer/Debug/AppServer[0x4048dc]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7fdee3e3376d]
/home/christoph/cpp/tippspiel/AppServer/Debug/AppServer[0x402659]
======= Memory map: ========
00400000-00407000 r-xp 00000000 08:05 910061 /home/christoph/cpp/tippspiel/AppServer/Debug/AppServer
00606000-00607000 r--p 00006000 08:05 910061 /home/christoph/cpp/tippspiel/AppServer/Debug/AppServer
00607000-00608000 rw-p 00007000 08:05 910061 /home/christoph/cpp/tippspiel/AppServer/Debug/AppServer
00cd0000-00d0d000 rw-p 00000000 00:00 0 [heap]
7fdedc000000-7fdedc021000 rw-p 00000000 00:00 0
7fdedc021000-7fdee0000000 ---p 00000000 00:00 0
7fdee1f60000-7fdee1f78000 r-xp 00000000 08:03 396475 /lib/x86_64-linux-gnu/libresolv-2.15.so
7fdee1f78000-7fdee2178000 ---p 00018000 08:03 396475 /lib/x86_64-linux-gnu/libresolv-2.15.so
7fdee2178000-7fdee2179000 r--p 00018000 08:03 396475 /lib/x86_64-linux-gnu/libresolv-2.15.so
7fdee2179000-7fdee217a000 rw-p 00019000 08:03 396475 /lib/x86_64-linux-gnu/libresolv-2.15.so
7fdee217a000-7fdee217c000 rw-p 00000000 00:00 0
7fdee217c000-7fdee2183000 r-xp 00000000 08:03 396436 /lib/x86_64-linux-gnu/libnss_dns-2.15.so
7fdee2183000-7fdee2382000 ---p 00007000 08:03 396436 /lib/x86_64-linux-gnu/libnss_dns-2.15.so
7fdee2382000-7fdee2383000 r--p 00006000 08:03 396436 /lib/x86_64-linux-gnu/libnss_dns-2.15.so
7fdee2383000-7fdee2384000 rw-p 00007000 08:03 396436 /lib/x86_64-linux-gnu/libnss_dns-2.15.so
7fdee2384000-7fdee2386000 r-xp 00000000 08:03 392485 /lib/libnss_mdns4_minimal.so.2
7fdee2386000-7fdee2585000 ---p 00002000 08:03 392485 /lib/libnss_mdns4_minimal.so.2
7fdee2585000-7fdee2586000 r--p 00001000 08:03 392485 /lib/libnss_mdns4_minimal.so.2
7fdee2586000-7fdee2587000 rw-p 00002000 08:03 392485 /lib/libnss_mdns4_minimal.so.2
7fdee2587000-7fdee2593000 r-xp 00000000 08:03 396438 /lib/x86_64-linux-gnu/libnss_files-2.15.so
7fdee2593000-7fdee2792000 ---p 0000c000 08:03 396438 /lib/x86_64-linux-gnu/libnss_files-2.15.so
7fdee2792000-7fdee2793000 r--p 0000b000 08:03 396438 /lib/x86_64-linux-gnu/libnss_files-2.15.so
7fdee2793000-7fdee2794000 rw-p 0000c000 08:03 396438 /lib/x86_64-linux-gnu/libnss_files-2.15.so
7fdee2794000-7fdee2795000 ---p 00000000 00:00 0
7fdee2795000-7fdee2f99000 rw-p 00000000 00:00 0
7fdee2f99000-7fdee2f9b000 r-xp 00000000 08:03 396388 /lib/x86_64-linux-gnu/libdl-2.15.so
7fdee2f9b000-7fdee319b000 ---p 00002000 08:03 396388 /lib/x86_64-linux-gnu/libdl-2.15.so
7fdee319b000-7fdee319c000 r--p 00002000 08:03 396388 /lib/x86_64-linux-gnu/libdl-2.15.so
7fdee319c000-7fdee319d000 rw-p 00003000 08:03 396388 /lib/x86_64-linux-gnu/libdl-2.15.so
7fdee319d000-7fdee319e000 rw-p 00000000 00:00 0
7fdee319e000-7fdee31b4000 r-xp 00000000 08:03 396507 /lib/x86_64-linux-gnu/libz.so.1.2.7
7fdee31b4000-7fdee33b3000 ---p 00016000 08:03 396507 /lib/x86_64-linux-gnu/libz.so.1.2.7
7fdee33b3000-7fdee33b4000 r--p 00015000 08:03 396507 /lib/x86_64-linux-gnu/libz.so.1.2.7
7fdee33b4000-7fdee33b5000 rw-p 00016000 08:03 396507 /lib/x86_64-linux-gnu/libz.so.1.2.7
7fdee33b5000-7fdee34b0000 r-xp 00000000 08:03 396415 /lib/x86_64-linux-gnu/libm-2.15.so
7fdee34b0000-7fdee36af000 ---p 000fb000 08:03 396415 /lib/x86_64-linux-gnu/libm-2.15.so
7fdee36af000-7fdee36b0000 r--p 000fa000 08:03 396415 /lib/x86_64-linux-gnu/libm-2.15.so
7fdee36b0000-7fdee36b1000 rw-p 000fb000 08:03 396415 /lib/x86_64-linux-gnu/libm-2.15.so
7fdee36b1000-7fdee396d000 r-xp 00000000 08:03 805247 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0
7fdee396d000-7fdee3b6c000 ---p 002bc000 08:03 805247 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0
7fdee3b6c000-7fdee3b72000 r--p 002bb000 08:03 805247 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0
7fdee3b72000-7fdee3bf0000 rw-p 002c1000 08:03 805247 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0
7fdee3bf0000-7fdee3bf5000 rw-p 00000000 00:00 0
7fdee3bf5000-7fdee3c0d000 r-xp 00000000 08:03 396469 /lib/x86_64-linux-gnu/libpthread-2.15.so
7fdee3c0d000-7fdee3e0c000 ---p 00018000 08:03 396469 /lib/x86_64-linux-gnu/libpthread-2.15.so
7fdee3e0c000-7fdee3e0d000 r--p 00017000 08:03 396469 /lib/x86_64-linux-gnu/libpthread-2.15.so
7fdee3e0d000-7fdee3e0e000 rw-p 00018000 08:03 396469 /lib/x86_64-linux-gnu/libpthread-2.15.so
7fdee3e0e000-7fdee3e12000 rw-p 00000000 00:00 0
7fdee3e12000-7fdee3fc7000 r-xp 00000000 08:03 396373 /lib/x86_64-linux-gnu/libc-2.15.so
7fdee3fc7000-7fdee41c6000 ---p 001b5000 08:03 396373 /lib/x86_64-linux-gnu/libc-2.15.so
7fdee41c6000-7fdee41ca000 r--p 001b4000 08:03 396373 /lib/x86_64-linux-gnu/libc-2.15.so
7fdee41ca000-7fdee41cc000 rw-p 001b8000 08:03 396373 /lib/x86_64-linux-gnu/libc-2.15.so
7fdee41cc000-7fdee41d1000 rw-p 00000000 00:00 0
7fdee41d1000-7fdee41e6000 r-xp 00000000 08:03 396398 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fdee41e6000-7fdee43e5000 ---p 00015000 08:03 396398 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fdee43e5000-7fdee43e6000 r--p 00014000 08:03 396398 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fdee43e6000-7fdee43e7000 rw-p 00015000 08:03 396398 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fdee43e7000-7fdee44cc000 r-xp 00000000 08:03 794607 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7fdee44cc000-7fdee46cb000 ---p 000e5000 08:03 794607 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7fdee46cb000-7fdee46d3000 r--p 000e4000 08:03 794607 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7fdee46d3000-7fdee46d5000 rw-p 000ec000 08:03 794607 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7fdee46d5000-7fdee46ea000 rw-p 00000000 00:00 0
7fdee46ea000-7fdee473d000 r-xp 00000000 08:03 790326 /usr/lib/libmysqlpp.so.3.1.0
7fdee473d000-7fdee493c000 ---p 00053000 08:03 790326 /usr/lib/libmysqlpp.so.3.1.0
7fdee493c000-7fdee493f000 r--p 00052000 08:03 790326 /usr/lib/libmysqlpp.so.3.1.0
7fdee493f000-7fdee4940000 rw-p 00055000 08:03 790326 /usr/lib/libmysqlpp.so.3.1.0
7fdee4940000-7fdee4962000 r-xp 00000000 08:03 396351 /lib/x86_64-linux-gnu/ld-2.15.so
7fdee4ad9000-7fdee4b47000 rw-p 00000000 00:00 0
7fdee4b5e000-7fdee4b62000 rw-p 00000000 00:00 0
7fdee4b62000-7fdee4b63000 r--p 00022000 08:03 396351 /lib/x86_64-linux-gnu/ld-2.15.so
7fdee4b63000-7fdee4b65000 rw-p 00023000 08:03 396351 /lib/x86_64-linux-gnu/ld-2.15.so
7fff11693000-7fff116b4000 rw-p 00000000 00:00 0 [stack]
7fff117ff000-7fff11800000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Mein Quelltext sieht wie folgt aus (Ausschnitt):
Code:
string getContent() {
stringstream content;
content << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
content << " <request type=\"answer\">" << endl;
cout << "stringstream initalisiert und 2 zeilen geschrieben" << endl;
// Connect to the database.
mysqlpp::Connection conn(false);
if (conn.connect("tippspiel", "localhost", "tippspiel", "xxxxxxxxxxxx")) {
string sql = "SELECT u.user, c.name, s.shout FROM users u, competition c, shouts s";
sql += " WHERE u.id=s.user_id AND c.id=s.competition ORDER BY s.shout_time DESC";
cout << "nach concat sql" << endl;
mysqlpp::Query query = conn.query(sql);
if (mysqlpp::StoreQueryResult res = query.store()) {
for (size_t i = 0; i < res.num_rows(); ++i) {
content << " ";
content << "<item type=\"shout\" user=\"" << res[i][0] << "\" competition=\"" << res[i][1] << "\">" << endl;
content << " " << res[i][2] << "" << endl;
content << " </item>" << endl;
cout << "zeile " << i << " geschrieben." << endl;
}
}
else {
cerr << "Failed to get item list: " << query.error() << endl;
return "fail";
}
} else {
cerr << "DB connection failed: " << conn.error() << endl;
return "fail";
}
conn.shutdown();
conn.~Connection();
content << "</request>";
cout << "letzte zeile geschrieben" << endl;
string rtstring = content.str();
cout << "nur ausführung" << endl;
return rtstring;
}
Die couts sind nur dazu da, um den Fehler zu lokalisieren, die dazugehörige Ausgabe:
Code:
stringstream initalisiert und 2 zeilen geschrieben
nach concat sql
zeile 0 geschrieben.
zeile 1 geschrieben.
[...]
zeile 1062 geschrieben.
zeile 1063 geschrieben.
letzte zeile geschrieben
nur ausführung
Hat jemand eine Idee, warum das beim return-Statement den Fehler wirft?