Сбой программы при генерации / отлове пользовательских исключений

У меня проблема при создании / отлове пользовательских исключений.

Контекст: я делаю управляющего свойством (как в недвижимости), который хранит свойства, арендаторов, банковские счета и транзакции как классы и объединяет их по контракту.

Каждая транзакция будет узлом в двусвязном списке.

Я кормил конструктор транзакций 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 и нет
исключения брошены.

Спасибо за любые ответы. Извините за длинный код.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …