Russian Qt Forum
Ноябрь 23, 2024, 04:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка read access violation  (Прочитано 3483 раз)
Toad
Гость
« : Июль 31, 2013, 22:31 »

Помогите пожалуйста, ковырялся пол дня, не понимаю в чем проблема.
Итак:
на компьютере установлена СУБД Oracle x86;
Операционная система Windows x64;
для написания приложений использую Qt 4.8.4.

Компилировал драйвер для работы с Oracle при помощи:
Visual Studio Command Prompt (2010)
прописывал пути к папке libs и include
на выходе получил 4 файла - qsqloci4.dll, qsqloci4.lib, qsqlocid4.dll, qsqlocid4.lib.

Суть проблемы - возникает ошибка чтения памяти при следующем коде:
Код:
#include <QSqlDatabase>
int main()
{
    QTextStream cout(stdout);
    QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
    if(!db.isValid())
        return -1;

    db.setDatabaseName("XE");
    db.setUserName("UserName");
    db.setPassword("Password");
    if(!db.open())
    {
        cout << db.lastError().text();
        return -2;
    }

    db.close();
    return 0;
}

Кажется, я всё выполнил по правилам, добавил соединение с необходимым драйвером, установил имя базы, логин и пароль, а затем открыл. Последней строкой закрыл базу.

Ошибка возникает уже не в моем коде, а в qsqldatabase.cpp, в деструкторе

Код:
QSqlDatabasePrivate::~QSqlDatabasePrivate()
{
    if (driver != shared_null()->driver)
        delete driver;
}
при попытке удалить объект driver.

Собственно вопрос в том, что я не так делаю и как эту ошибку исправить?
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #1 : Август 01, 2013, 16:04 »

первое что приходит на ум, driver уже удален кем то ранее, а указатель на него еще висит.
возможно юзаете не ту версию библиотеки, т.е. прога дебаг, а либа релиз или наоборот. у меня была такая же проблема, прога тупо летела в сегментацию изза того, что отладочная прога, а либы были релизные.
Записан
Toad
Гость
« Ответ #2 : Август 01, 2013, 16:46 »

я тоже так сначала подумал, но я собирал dll как релиз версию, так и дебаг.
Записан
BuRn
Гость
« Ответ #3 : Сентябрь 04, 2013, 11:27 »

Залезть глубже не пытались ? Я бы попробовал зайти в деструктор и посмотреть что там вообще происходит и что в driver , что он там пытается очистить и т.д.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.132 секунд. Запросов: 22.