0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 20
|
|
1 | |
Доступ к одному объекту fstream из разных функций03.04.2012, 13:54. Показов 1349. Ответов 3
Метки нет (Все метки)
Здравствуйте форумчане.
Написал приложение на CB6 c++. Глобально объявил несколько объектов fstream в модуле (типа fstream abc; ). Создал несколько функций (не являются членами какого-либо класса), одна из которых открывает файл, другие используют, последняя закрывает при завершении программы. Программа компилируется, прекрасно работает, файлы читаются и пишутся, но при попытке собрать автономный exe возникает ошибка Access violation at address xxxxxxxx Read of Address 00000000. Это как раз и вызвано тем, что объекты fstream обявлены глобально (при внесении объявления в тело функции - ошибка пропадает). Вопрос: кто знает как правильно создать объект fstream так, чтобы иметь возможность использовать его как глобальную переменную в разных функциях? Заранее извиняюсь за безграмотность в данном вопросе.
0
|
03.04.2012, 13:54 | |
Ответы с готовыми решениями:
3
Доступ к одному объекту из разных классов Доступ к одному и тому же объекту из двух списков Совместный доступ к объекту из разных форм Два разных АЦП разных устройств к одному датчику |
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
|
|
03.04.2012, 15:15 | 2 |
сталкивался с подобной проблемой. вариант 1 (не проверенный и плохо переносимый в плане дописывания префикса перед обращением к потоку) - создание потока внутри конструктора глобального объекта. вариант 2 (рабочий чуть более переносимый так как заменяются только точки на стрелку) - использование указателя на поток. поток создается динамически в начале программы и удаляется перед выходом.
Добавлено через 1 минуту ...в чем проблема так и не докопался, чисто теоретически если кто знает - скажите, я так полагаю что то там не то шаблон делает в глобальной области, может какие-то из шаблонов к моменту создания объекта еще не успели сделать чего то.. хз
0
|
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 20
|
|
03.04.2012, 17:39 [ТС] | 3 |
Благодарю, так и сделал. Вместо (fstream abc; ) (fstream* abc; +где-то в коде abc = new fstream; ). Стрелки вполне сгодятся.
0
|
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 20
|
|
05.04.2012, 08:30 [ТС] | 4 |
Кстати, когда используются стрелки и динамическое создание объекта, знаток кода либо ругается, либо открывается через раз. Нужно иметь это ввиду, тем кто его не отключает.
0
|
05.04.2012, 08:30 | |
05.04.2012, 08:30 | |
Помогаю со студенческими работами здесь
4
Как присвоить несколько параметров одному объекту? Что будет, если два разных потока попытаются отправить одновременно одному клиенту два разных пакета Доступ к объекту Доступ к объекту класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |