Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2018, 06:16   #1
S.Ruslan
Пользователь
 
Регистрация: 15.07.2018
Сообщений: 25
По умолчанию Вызвано необработанное исключение: нарушение доступа для чтения. this было nullptr.

Доброго времени суток!

При вызове этой функции

Код:
ConnectionInfo* CManagerSQL::GetConnection() {
	try {
				
		while (true) {
			
			for (int i = 0; i < DBConnectList.size(); i++) {
				
				if (DBConnectList[i].Connect->is_open()) {
					if (DBConnectList[i].IsFree) {
						DBConnectList[i].IsFree = false;

						return &DBConnectList[i];
						break;
					}
				}
			}
		}
	}
	catch (std::exception &ex) {
		PrintToConsole(ex.what());
	}
}
Массив заполняется элементами в конструкторе класса:
Код:
CManagerSQL::CManagerSQL(sConnectToDB NewConn) {
	
	try {

		DBConnectList.clear();

		for (int i = 0; i < GetCountConnected(); i++) {
			
			ConnectionInfo NewConnect;

			std::string str_connection = string_format(R"(host=%s port=%i user=%s password=%s dbname=%s)",NewConn.host.c_str(), NewConn.port, NewConn.user.c_str(), NewConn.password.c_str(), NewConn.dbname.c_str());

			NewConnect.Connect = new connection(str_connection.c_str());
			if (NewConnect.Connect->is_open()) {
				NewConnect.Status = true;
				NewConnect.Host = NewConnect.Connect->hostname();
				NewConnect.Port = (int)NewConnect.Connect->port();
				NewConnect.NameDB = NewConnect.Connect->dbname();
				NewConnect.User = NewConnect.Connect->username();
				DBConnectList.push_back(NewConnect);
			}
		}

		PrintToConsole(string_format(R"(Count connected to DB: %i/%i)", DBConnectList.size(), GetCountConnected()));

		StatusConnect = true;
	}
	catch (const pqxx::sql_error &e) {
		std::cerr << "\nSQL error: " << e.what() << std::endl;
		std::cerr << "Query was: " << e.query() << std::endl;
	}
	catch (const std::exception &e) {
		std::cerr << "\n > Error: " << e.what() << std::endl;
	}
}
которая должна выдать свободный элемент массива, вылетает следующая ошибка(вложение).

Что же не так?
Изображения
Тип файла: png err.png (31.6 Кб, 160 просмотров)

Последний раз редактировалось S.Ruslan; 11.10.2018 в 06:26.
S.Ruslan вне форума Ответить с цитированием
Старый 11.10.2018, 07:06   #2
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Не очень вглядывался в ваш код, но вчера решал подобную проблему. Проверьте выход за пределы массива при обращении к массиву.
KAMLS вне форума Ответить с цитированием
Старый 11.10.2018, 07:35   #3
S.Ruslan
Пользователь
 
Регистрация: 15.07.2018
Сообщений: 25
По умолчанию

Функция не может получить доступ к этому массиву... странно...
S.Ruslan вне форума Ответить с цитированием
Старый 11.10.2018, 12:22   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

У вас сам объект CManagerSQL - это указатель, который содержит nullptr
Проблема не в коде CManagerSQL а в том, где он вызывается.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нарушение доступа для чтения. Не могу устранить ошибку. Alistra Помощь студентам 5 27.02.2018 14:54
Необработанное исключение по адресу 0x012A8F88 в Задачи.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x01020000. Мой повелитель Общие вопросы C/C++ 2 09.01.2016 19:53
Исправить ошибку: необработанное исключение по адресу, нарушение прав доступа при записи по адресу Анастасия_18 Общие вопросы C/C++ 3 16.07.2014 09:57
C++ Error Необработанное исключение...нарушение прав доступа Alt_Shift Помощь студентам 1 24.05.2012 12:55