У меня проблема при создании / отлове пользовательских исключений.
Контекст: я делаю управляющего свойством (как в недвижимости), который хранит свойства, арендаторов, банковские счета и транзакции как классы и объединяет их по контракту.
Каждая транзакция будет узлом в двусвязном списке.
Я кормил конструктор транзакций nullptr
как in_tnumber
чтобы увидеть, что он будет делать.
Вот класс транзакции:
// manager is a namespace that is used for the entire program
// Each transaction will be stored as a node on a doubly linked list
class transaction
{
public:
transaction(const char *in_tnumber,
const int &in_amount,
manager::transaction *in_head)
throw(std::bad_alloc, manager::pexception);
~transaction()
// Other functions...
private:
// Links for the list.
manager::transaction *head;
manager::transaction *tail;
// Transaction number
char *tnumber;
// Transaction amount
int tamount;
char *remarks
};
transaction::transaction(const char *in_tnumber,
const int &in_amount,
manager::transaction *in_head)
throw(std::bad_alloc, manager::pexception)
{
if ((in_tnumber == nullptr) || (in_tnumber[0] == '\0'))
throw manager::pexception("Transaction number cannot be empty ");
if (in_tamount <= 0)
throw manager::pexception("Transaction amount cannot be empty ");
tnumber = new char[strlen(in_tnumber) + 1];
strcpy(tnumber, in_tnumber);
tamount = in_tamount;
remarks = nullptr;
tail = nullptr;
}
transaction::~transaction()
{
delete [] tnumber;
delete [] remarks;
}
У меня также есть класс исключения, как таковой
class pexception
{
public:
pexception(char *in_message);
~pexception() { delete [] message; }
char* get_message() const { return message; }
private:
char *message;
};
pexception::pexception(const char *in_message)
{
message = new char[strlen(in_message) + 1];
strcpy(message, in_message);
}
Когда исключение выбрасывается transaction
конструктор, я получаю это:
Номер транзакции не может быть пустым
EXITING …
Ошибка в / storage / dimos / projects / build-soft_dev_sat_Mk_III-Debug / soft_dev_sat_Mk_III ‘: двойное освобождение или повреждение (fasttop): 0x00000000006f60c0
и Qt Creator говорит, что программа потерпела крах.
main () выглядит так
int main()
{
try {
transaction test("", // As opposed to "1234567890" or something like that
300,
nullptr);
cout << "Tnumber: " << test.get_tnumber();
}
catch(manager::pexception e)
{
cout << e.get_message();
cout << "\nEXITING...\n";
return -1;
}
return 0;
}
Я в командной строке (debian) Как мне это исправить?
Работает нормально, когда заполнен in_tnumber и нет
исключения брошены.
Спасибо за любые ответы. Извините за длинный код.
Задача ещё не решена.
Других решений пока нет …