Witam, niedawno zacząłem pisać program w Dev-cpp 5.11, który ma łączyć się z bazą danych MySQL.
Korzystam z bibliotek Connector/C++ pobranych ze strony dev.mysql.com. Dodatkowo musiałem dołożyć pliki "Boost". Po nierównej walce z wersjami i kompatybilnością udało się poprawnie skompilować program. Niestety Zaraz po uruchomieniu podczas wykonywania
driver = get_driver_instance();
program się zawiesza a pomocny windows 10 proponuje debug albo zamknięcie programu. ("Process exited after 1.923 seconds with return value 3221225477")
Udało mi się wyczytać ze wartość 3221225477 = 0xC0000005 = STATUS_ACCESS_VIOLATION. (O jakie naruszenie zasad chodzi?)
Poniżej zamieszczam kod źródłowy banalnego programu:
#include <stdlib.h>
#include <iostream>
#include <cstdio>
#include <string>
#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include "coma_class.h"
using namespace std;
void send_log(string log){
cout << "[Comatose] " + log << endl;
}
int main(int argc, char** argv) {
send_log("Opening connection...");
try {
sql::Driver *driver;
sql::Connection *con;
sql::Statement *stmt;
sql::ResultSet *res;
send_log("Opening database connection...");
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "root", ""); // nazwa uzytkownika sie zgadza, bez hasla server mysql lokalnie dziala
con->setSchema("comatose"); // nie wplywa na blad (probowalem ukryc zeby sprawdzic)
stmt = con->createStatement(); // to tez nie
delete res;
delete stmt;
delete con;
} catch (sql::SQLException &e) {
cout << "# ERR: SQLException in " << __FILE__;
cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
cout << "# ERR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}
string command_line = "";
while(1){
cout << "SERVER@ROOT> ";
getline(cin, command_line);
if(command_line == "exit"){
return 0;
} else {
cout << "Unknown command." << endl;
command_line = "";
}
}
return 0;
}
Kod mysql-a wzięty z przykładu z ich strony. https://dev.mysql.com/doc/connector-cpp/en/connector-cpp-examples-complete-example-1.html
Wiecie może dlaczego tak się dzieje mimo poprawnej kompilacji i jak to naprawić? Jeśli potrzeba dodatkowych informacji/screenow to piszcie a dodam :)