C++ Mysql Segmentation Fault

Тема в разделе "Общие вопросы по С и С++", создана пользователем lamez, 13 дек 2009.

Статус темы:
Закрыта.
  1. lamez

    lamez Гость

    :) :)

    Windows. Mingw. G++. Mysql5141.
    Сначала я подключил всё как положено и при компиляции первого MYSQL-тест-приложения получил, что SOCKET из нот э тайп... Дело понятно в чем.
    Полез в mysql.h.

    Смотрю:
    #ifndef my_socket_defined
    #ifdef __WIN__
    #define my_socket SOCKET

    Ну и вышел из положения так:
    /* MY */ #define __CYGWIN__
    #ifdef __CYGWIN__ /* CYGWIN implements a UNIX API */
    #undef WIN
    #undef _WIN
    #undef _WIN32
    #undef _WIN64
    #undef __WIN__
    #endif

    Не знаю, верно ли... Но скомпилилось всё на ура.

    Идём дальше. На Qt не обращайте внимания.

    Код (Text):
    int main(int argc, char *argv[])
    {
    QCoreApplication a(argc, argv);

    MYSQL *mysql = mysql_init(NULL); // Все другие варианты сегфолтят сразу же

    MYSQL_RES *res;
    MYSQL_ROW row;

    if ( !(mysql_real_connect(mysql, "127.0.0.1", "root", "", "phpmyadmin", 3306, NULL, 0)) )
    cout << mysql_error(mysql) << endl;

    mysql_query(mysql,"INSERT INTO `temptable` ( `id` ) VALUES ('2121');"); // срабатывает на ура
    mysql_query(mysql,"show tables"); // тоже всё нормально

    cout << "1" << endl;

    if ((res = mysql_use_result(mysql)) == NULL)
    cout << "sqlres is null" << endl;
    else
    {
    cout << "2"<< endl;

    row = mysql_fetch_row(res);

    if (row != NULL){
    cout << "row = " << row[0] << endl;
    }

    //mysql_free_result(res); // [b][font="Arial Black"][color="#FF0000"]ОПА! ЗДЕСЬ ОШИБКА!!! СЕГФОЛТ![/color][/font][/b]
    cout << "2.5" << endl;
    }

    mysql_close(mysql);


    cout << "3"<< endl;

    cin >> (new char());

    return a.exec(); // [b][font="Arial Black"][color="#FF0000"]ОПА! ЗДЕСЬ ОШИБКА!!! СЕГФОЛТ![/color][/font][/b]
    }
    Ну и если убрать все mysql строки, то никаких сегфолтов.
    Если два раза пробовать строку достать:
    Код (Text):
     row = mysql_fetch_row(res);
    row = mysql_fetch_row(res);
    То будет сегфолт.
    Если вызвать
    Код (Text):
    mysql_free_result(res);
    ТОЖЕ БУДЕТ СЕГФОЛТ!

    Смотрел кучу аналогичных примеров. Ставил мемсеты на MYSQL*.
    И еще если я юзаю MYSQL mysql, и передаю &mysql, то снова будет сегфолт.
    Если я делаю так:
    Код (Text):
    MYSQL *mysql;
    mysql_init(mysql);
    ТОже будет сегфолт.

    Скомпилить коннекторы, предлагаемые с dev.Mysql.com под мингв32 не получается. Что делать?

    Где ошибки?
     
  2. lamez

    lamez Гость

    Ну, вот, например, вызываю free_result.

    0 my_path C:\Users\szinin\Documents\qt\testgui\testConsole\release\libmysql.dll 0 0x1001a907
    1 ?? 0 0x004d179b
    2 mysql_free_result C:\Users\szinin\Documents\qt\testgui\testConsole\release\libmysql.dll 0 0x1000297b
    3 ?? 0 0x00000000


    Поставил другой сервак мускула. Тоже самое.

    Добавлено: Сейчас пробовал тоже самое с вижуала прокрутить. Представьте себе.. Получилось.
    НО ПРОБЛЕМА НЕ РЕШЕНА. Мне нельзя пользоваться вижуалом.
    Обязательно mingw-g++.
    Может быть проблема в libmysql.dll? Может быть, для приложения скомпилированного в qt migwg++ под виндой нужна другая либа?)) Я в этом ничего не понимаю, подскажите.
    :) :)
     
Загрузка...
Похожие Темы - C++ Mysql Segmentation
  1. franko
    Ответов:
    5
    Просмотров:
    1.900
  2. Nadia_IT
    Ответов:
    0
    Просмотров:
    20
  3. kmm96
    Ответов:
    1
    Просмотров:
    24
  4. TriXel_01
    Ответов:
    5
    Просмотров:
    98
  5. acs-nexus
    Ответов:
    0
    Просмотров:
    90
Статус темы:
Закрыта.

Поделиться этой страницей