Android97
@Android97
Программист-Альпинист

Почему теряем данные типа string в с++?

Класс:
#include "Person.h"
#include <cstring>
#include <string>
using namespace std;
class Adult :
	public Person
{
public:
	Adult();
	~Adult();
	std::string GetDescription();
	static void RandAdult(Adult * adult);
	Person* MarriedOn = nullptr;
	int GetAge();
	void SetAge(int age);
	string WorkPlace = (string)"";

};


std::string Adult::GetDescription()
{
	string tmpS = Surname + " " + Name + ", " + IntToStr(Age) + " years old," + SexToStr(sex);
	if (MarriedOn == nullptr)
	{
		tmpS = tmpS + ", single";
	}
	else
	{
		tmpS = tmpS + ", married on "+MarriedOn->Name+" "+MarriedOn->Surname;
	}
	if (WorkPlace.length()>0)
	{
		tmpS = tmpS + ", " +WorkPlace;
	}
	else
	{
		tmpS = tmpS + ", unworked";
	}
	return tmpS;
}

Возникает ошибка при работе с полем WorkPlace.
Ошибка при работе программы :
Возникло необработанное исключение по адресу 0x752AA6F2 в LAB6_5152.exe: исключение Microsoft C++: std::bad_alloc по адресу памяти 0x0019E050.

Строка с ошибкой :
tmpS = tmpS + ", " +WorkPlace;
  • Вопрос задан
  • 322 просмотра
Решения вопроса 1
Android97
@Android97 Автор вопроса
Программист-Альпинист
@MarkusD

В списке хранились объекты типа Person по значению, при добавлении в список объекта типа Adult происходило копирование только данных Person. После этого приведение типа Person к типу Adult становилось бессмысленным, а вызов функции `GetDescription()` приводил к выходу за границы памяти объекта и вызывал ошибку доступа к памяти.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
15432
@15432
Системный программист ^_^
string WorkPlace = (string)"";
заменить на
string WorkPlace = string("");
или вообще на
string WorkPlace;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы