powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / memory exception
13 сообщений из 13, страница 1 из 1
memory exception
    #38165388
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.
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
memory exception
    #38165395
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G,

1. name - это поле, и оно не коллабельное;
2. Обращение к члену экземпляра через тип этого экземпляра.
...
Рейтинг: 0 / 0
memory exception
    #38165401
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
memory exception
    #38165485
автор throw new mExChild(typeid(obj).name()); // вот здесь ошибка. В конструктор зашел, а дальше вылетает.
}
catch (mExChild & exObj)
Уберите new и принимайте по ссылке.
А где вы прочитали что нужно кидать исключения через new?

Даже представления не имею когда это может быть необходимо и почему эту возможность не залочили.
...
Рейтинг: 0 / 0
memory exception
    #38165625
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
memory exception
    #38165710
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G
MasterZivА собственно, почему ты её должен НЕ получать ?
Ты же сам делаешь throw new mExChild -- это выбрасывание исключения.
Ты его НЕ ловишь, вот программа и вылетает.
Как же это не ловлю? :) catch (mExChild exObj) присутствует.


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

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


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

Золотое правило в С++ -- кидать объекты по значению, ловить по ссылке.
...
Рейтинг: 0 / 0
memory exception
    #38165722
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
memory exception
    #38166319
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, возможность не залочили
Спасибо большое за подробное объяснение!

Может быть еще сможете в таком вопросе подсказать. У меня есть такое задание:
Создать базовый и производные классы исключений. С помощью оператора catch() базового класса осуществить перехват исключений производных классов.
Я не понимаю, что именно от меня требуется. Кто-то понимает? :)
...
Рейтинг: 0 / 0
memory exception
    #38166529
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
memory exception
    #38166847
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможность не залочили ,
Спасибо большое за пример! А что дает такая конструкция не подскажите?
...
Рейтинг: 0 / 0
memory exception
    #38166855
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_GСпасибо большое за пример! А что дает такая конструкция не подскаж е те?Возможность улавливать менее специфичное исключение, чем брошенное. К примеру, функция открытия файла бросила исключение "ошибка при открытии файла из-за неверного формата: нарушена структура заголовка", а поймано исключение "ошибка при открытии файла из-за неверного формата".
...
Рейтинг: 0 / 0
memory exception
    #38167874
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще -то наследоваться лучше от стандартного std::exception.
...
Рейтинг: 0 / 0
memory exception
    #38168056
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbstractionMaximuS_GСпасибо большое за пример! А что дает такая конструкция не подскаж е те?Возможность улавливать менее специфичное исключение, чем брошенное. К примеру, функция открытия файла бросила исключение "ошибка при открытии файла из-за неверного формата: нарушена структура заголовка", а поймано исключение "ошибка при открытии файла из-за неверного формата".
Спасибо большое за комментарий. А Вы бы не могли простенький пример с кодом привести?

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


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