Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / memory exception / 13 сообщений из 13, страница 1 из 1
25.02.2013, 19:14
    #38165388
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
memory exception
Всем привет!
Подскажите, пожалуйста, почему я получаю такую ошибку:
Unhandled exception at 0x76f115de (ntdll.dll) in Exam.exe: Microsoft C++ exception: mExChild at memory location 0x002ff768..
На строчке указанной внизу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
class mEx
{
public:
	virtual void showError(char* str) = 0;
};

class mExChild:public mEx
{
public:
	const char* name;
	mExChild(const char* name)
	{
		this->name = name;
	}
	void showError(char* str)
	{
		cout<<str;
	}
};

class a
{

};

int main()
{
	try
	{
		a obj;
		if (1!=2)
			throw new mExChild(typeid(obj).name()); // вот здесь ошибка. В конструктор зашел, а дальше вылетает.
	}
	catch (mExChild exObj)
	{
		exObj.showError("error for object type");
		cout<<" "<<exObj.name;
	}
};


Заранее спасибо!
...
Рейтинг: 0 / 0
25.02.2013, 19:20
    #38165395
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
memory exception
MaximuS_G,

1. name - это поле, и оно не коллабельное;
2. Обращение к члену экземпляра через тип этого экземпляра.
...
Рейтинг: 0 / 0
25.02.2013, 19:24
    #38165401
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
memory exception
MaximuS_GПодскажите, пожалуйста, почему я получаю такую ошибку:
Unhandled exception at 0x76f115de (ntdll.dll) in Exam.exe: Microsoft C++ exception: mExChild at memory location 0x002ff768..
На строчке указанной внизу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
			throw new mExChild(typeid(obj).name()); // вот здесь ошибка. В конструктор зашел, а дальше вылетает.
	}
	catch (mExChild exObj)
	{
		exObj.showError("error for object type");
		cout<<" "<<exObj.name;
	}
};




А собственно, почему ты её должен НЕ получать ?
Ты же сам делаешь throw new mExChild -- это выбрасывание исключения.
Ты его НЕ ловишь, вот программа и вылетает.
...
Рейтинг: 0 / 0
25.02.2013, 20:21
    #38165485
memory exception
автор throw new mExChild(typeid(obj).name()); // вот здесь ошибка. В конструктор зашел, а дальше вылетает.
}
catch (mExChild & exObj)
Уберите new и принимайте по ссылке.
А где вы прочитали что нужно кидать исключения через new?

Даже представления не имею когда это может быть необходимо и почему эту возможность не залочили.
...
Рейтинг: 0 / 0
25.02.2013, 23:11
    #38165625
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
memory exception
NekZMaximuS_G,
1. name - это поле, и оно не коллабельное;
2. Обращение к члену экземпляра через тип этого экземпляра.
1. Если я делаю так
Код: plaintext
1.
throw new mExChild(typeid(obj).name);


то получаю ошибку
a pointer to a bound function may only be used to call the function
2. Я обращаюсь не к полю name объекта obj, я обращаюсь к методу name объекта, который возвращает функция typeid();

MasterZivА собственно, почему ты её должен НЕ получать ?
Ты же сам делаешь throw new mExChild -- это выбрасывание исключения.
Ты его НЕ ловишь, вот программа и вылетает.
Как же это не ловлю? :) catch (mExChild exObj) присутствует.

возможность не залочилиУберите new и принимайте по ссылке.
А где вы прочитали что нужно кидать исключения через new?
Спасибо большое! Принимая по ссылке все отлично заработало! Где прочитал, что нужно бросать через new, не помню.
А в чем именно разница между с new и без new не подскажите?
Код: plaintext
1.
throw new mExChild(typeid(obj).name())


Код: plaintext
1.
throw mExChild(typeid(obj).name())
...
Рейтинг: 0 / 0
26.02.2013, 01:46
    #38165710
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
memory exception
MaximuS_G
MasterZivА собственно, почему ты её должен НЕ получать ?
Ты же сам делаешь throw new mExChild -- это выбрасывание исключения.
Ты его НЕ ловишь, вот программа и вылетает.
Как же это не ловлю? :) catch (mExChild exObj) присутствует.


Присутствует, но он не будет ловить твоё исключение, типы разные.

MaximuS_Gвозможность не залочилиУберите new и принимайте по ссылке.
А где вы прочитали что нужно кидать исключения через new?
Спасибо большое! Принимая по ссылке все отлично заработало! Где прочитал, что нужно бросать через new, не помню.
А в чем именно разница между с new и без new не подскажите?


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

Золотое правило в С++ -- кидать объекты по значению, ловить по ссылке.
...
Рейтинг: 0 / 0
26.02.2013, 02:26
    #38165722
memory exception
MaximuS_GСпасибо большое! Принимая по ссылке все отлично заработало! Где прочитал, что нужно бросать через new, не помню.
А в чем именно разница между с new и без new не подскажите?
Код: plaintext
1.
throw new mExChild(typeid(obj).name())


Код: plaintext
1.
throw mExChild(typeid(obj).name())


Разница в том, что с new будет выделяться динамическая память в "куче", а это дольше, чем в автоматической памяти. И потом эту память надо будет освободить через delete.

C new работало бы вот так:
Код: plaintext
1.
2.
3.
throw new mExChild(typeid(obj).name()); // вот здесь ошибка. В конструктор зашел, а дальше вылетает.
}
catch (mExChild *exObj)



Казалось бы, new может понадобиться передать исключения между потоками, но вместо new для этого уже появился в новом стандарте std::make_exception_ptr<>() возвращающий std::exception_ptr<>.
...
Рейтинг: 0 / 0
26.02.2013, 13:42
    #38166319
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
memory exception
MasterZiv, возможность не залочили
Спасибо большое за подробное объяснение!

Может быть еще сможете в таком вопросе подсказать. У меня есть такое задание:
Создать базовый и производные классы исключений. С помощью оператора catch() базового класса осуществить перехват исключений производных классов.
Я не понимаю, что именно от меня требуется. Кто-то понимает? :)
...
Рейтинг: 0 / 0
26.02.2013, 15:00
    #38166529
memory exception
MaximuS_G MasterZiv, возможность не залочили
Спасибо большое за подробное объяснение!

Может быть еще сможете в таком вопросе подсказать. У меня есть такое задание:
Создать базовый и производные классы исключений. С помощью оператора catch() базового класса осуществить перехват исключений производных классов.
Я не понимаю, что именно от меня требуется. Кто-то понимает? :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
			throw mExChild(typeid(obj).name()); // вот здесь ошибка. В конструктор зашел, а дальше вылетает.
	}
	catch (mEx &exObj)
	{
		exObj.showError("error for object type");
		cout<<" "<<exObj.name;
	}
};
...
Рейтинг: 0 / 0
26.02.2013, 17:12
    #38166847
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
memory exception
возможность не залочили ,
Спасибо большое за пример! А что дает такая конструкция не подскажите?
...
Рейтинг: 0 / 0
26.02.2013, 17:17
    #38166855
Abstraction
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
memory exception
MaximuS_GСпасибо большое за пример! А что дает такая конструкция не подскаж е те?Возможность улавливать менее специфичное исключение, чем брошенное. К примеру, функция открытия файла бросила исключение "ошибка при открытии файла из-за неверного формата: нарушена структура заголовка", а поймано исключение "ошибка при открытии файла из-за неверного формата".
...
Рейтинг: 0 / 0
27.02.2013, 13:04
    #38167874
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
memory exception
Вообще -то наследоваться лучше от стандартного std::exception.
...
Рейтинг: 0 / 0
27.02.2013, 14:35
    #38168056
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
memory exception
AbstractionMaximuS_GСпасибо большое за пример! А что дает такая конструкция не подскаж е те?Возможность улавливать менее специфичное исключение, чем брошенное. К примеру, функция открытия файла бросила исключение "ошибка при открытии файла из-за неверного формата: нарушена структура заголовка", а поймано исключение "ошибка при открытии файла из-за неверного формата".
Спасибо большое за комментарий. А Вы бы не могли простенький пример с кодом привести?

MasterZivВообще -то наследоваться лучше от стандартного std::exception.
Спасибо за подсказку!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / memory exception / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]