![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ragzovskii |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
пишу на Visual C++ программу, работающую с СУБД Cache. чтобы позволить С++ работать с объектами из БД, Cache создает классы-проекции, в которых определены типы d_vector, d_obj_vector и так далее. в общем все, что начинается с d_
Controller.h
Controller.cpp
Treemode.cpp
после вызова функции Controller::generateTree() попытка вызвать cVector->size() дает access violation. не хотелось бы каждый раз заполнять этот вектор из БД. не подскажете решение? заранее спасибо |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| ragzovskii |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
если верить этому, то:
C++ library comes with a template class, d_ref<>, that encapsulates the behavior of references to proxy classes. An instance of d_ref<T> is a smart pointer to a proxy object of type T. This means that you can Call methods of the proxy object using the “->” (pointer) operator. Copy one d_ref<> to another. The two d_ref<> instances will point to the same proxy object. Pass a d_ref<> as an argument to a proxy method that may change the d_ref<> to point to another proxy object. |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну а как дело обстоит у d_ref с деструктором ? чтоб проверить предположение можете изменить
на
изменилось ли поведение после исправления ? |
||||
|
|||||
| ragzovskii |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
ничего не изменилось. добавил в .h и .cpp, передаваемое значение оставил прежним. ошибок компиляции нет, access violation есть
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну а если закомментируете вызов generateClTree AV остается ? |
|||
|
||||
| ragzovskii |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
нет. AV возникает после второго обращения.
например:
даже после такого использования возникает AV при обращении к cVector в следующей функции. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
есть подохрение что так cVector->operator [](i) делать не стоит.. возможно в cVector перегружен operator* ?
В общем мое имхо: смотреть stack call стоя на AV ... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а если упростить ?
и проверьте чему равен cVector в точке 1. и 2. Это сообщение отредактировал(а) mes - 14.4.2010, 08:38 |
|||
|
||||
| ragzovskii |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
Код немного другой :
и AV не появляется, cVector содержит то, что должен |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ах.. да..запарился.. исправил интересно.. т.е. AV появляется только при вызове generateClTree ?. ну тогда методом научного тыка можете определить какое из трех использований губит вектор.. |
|||
|
||||
| ragzovskii |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
вектор губит завершение работы функции. он ведет себя как локальная переменная. и я никак не пойму почему
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну значит первое предположение о причине в передаче параметров верно. смущает то, что Вы пробовали уже передавать по ссылке и не изменилось.. |
|||
|
||||
| ragzovskii |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 19.12.2009 Репутация: нет Всего: нет |
Онотоле вбил немного разума в мою голову и показал мне где я сделал ошибку.
В конструкторе класса, имеющего поле типа Controller я вместо controller = new Controller(conn); написал Controller controller(conn); |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
No comments. (с) BBC
Понятно, конечно, что если б видеть вес код, гадать на кофейной гуще бы не пришлось. Но всё равно доставило, спасибо. ragzovskii, ты не пробовал использовать "initialization lists"? С ними такого не было. Я так себя приучил: добавил новый данное-член Это сообщение отредактировал(а) kemiisto - 14.4.2010, 19:25 -------------------- |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |