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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2011, 23:50   #1
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию Нарушение прав доступа при чтении попытка вторая

Админов прошу тему не удалять, прошлая утонула, вероятно из-за объёма выложенного кода. Теперь проблему я локализовал в 1 методе, только вот как устранить, не знаю.

Итак, повторим вопрос: при выполнении следующего кода, вытетает ошибка в момент входа в конструктор:"Необработанное исключение в "0x588959da (msvcr100d.dll)" в "архиватор эксперименты.exe": 0xC0000005: Нарушение прав доступа при чтении "0xccccccc0"."
Причём ошибка появляется только в присутствии функции nuller.
Что самое интересное, в функцию nuller да и в конструктор я в дебаггере войти не могу. Т.е. при нажатии f11 для входа в конструктор и вылетает этот error

Код:
#include <iostream>
#include <fstream>
using namespace std;




struct bitfield
	{
		unsigned i1:1;
		unsigned i2:1;
		unsigned i3:1;
		unsigned i4:1;
		unsigned i5:1;
		unsigned i6:1;
		unsigned i7:1;
		unsigned i8:1;
	};

class basefileoperator		//базовая обработка файла
{
protected:
	char *filename;
	fstream file;
	bitfield field;
public:
	basefileoperator();
	virtual void nuller();
};

basefileoperator::basefileoperator()	//конструктор по умолчанию
{
	nuller();
}
void basefileoperator::nuller()		//обнуление объекта
{
	if(filename) 
           {
                 delete [] filename;
	      filename=NULL;
	}
           field.i1=field.i2=field.i3=field.i4=field.i5=field.i6=field.i7=field.i8=0;
	if(file.is_open()) 
	{
		file.flush();
		file.close();
	}
}



void main()
{
	basefileoperator b;
}

Последний раз редактировалось Farrel; 22.02.2011 в 00:07.
Farrel вне форума Ответить с цитированием
Старый 22.02.2011, 00:27   #2
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

Лан, сам спросил, сам отвечу. Дело оказалось в том, что в nuller delete пытался удалить данные из fiename, которых там по определению пока нет. По крайней мере стоило мне сделать filenam=NULL перед вызовом nuller, как всё чудестным образом заработало. Только вот во что я въехать никак не могу, так это почему прога сразу вылетала. По моей логике при дебаге она должна была войти сначала в конструктор, потом (при прогоне кода вручную) в nuller и уже там склеить ласты, но это почему-то происходило в момент входа в конструктор. Кто-нить объяснить это чудо может?
Farrel вне форума Ответить с цитированием
Старый 22.02.2011, 13:21   #3
Д_М
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 92
По умолчанию

Вероятно при оптимизации занлайнился конструктор
Д_М вне форума Ответить с цитированием
Старый 23.02.2011, 22:57   #4
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

А конкретнее? Честно говоря не понял о чём ты.
Farrel вне форума Ответить с цитированием
Старый 23.02.2011, 23:13   #5
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

когда функция инлайтится - не она прописывается прямо в месте вызова функции, а не компилятор идет по коду и не ищет эту функцию
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 24.02.2011, 12:01   #6
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

Ну хорошо, пусть сделан инлайн для конструктора, так как быть с nuller, которая в нём вызывается. Или для неё получается тоже инлайн сделан.
Farrel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нарушение прав доступа при чтении Farrel Общие вопросы C/C++ 1 22.02.2011 00:32
Ошибка: Нарушение доступа к памяти. VladimirAleks Общие вопросы Delphi 6 03.11.2009 14:42
Нарушение доступа по адресу *** в модуле 'rtl60.bpl' rfcr Общие вопросы Delphi 5 14.09.2009 16:19
Нарушение доступа Perception Помощь студентам 9 11.07.2008 14:44
Нарушение прав иконок трея joker Win Api 4 24.11.2007 07:33