У меня есть программа, использующая вектор (называемый _library), в котором хранятся объекты созданного мной класса 'thread' (содержит набор данных и выделяет некоторые вещи в своем конструкторе).
Теперь я попытался запустить свою программу, вызвав эту строку:
delete (_library[_currRunning]);
-> и получил страшное сообщение об ошибке сегментации от моего компилятора.
Я не понимаю, чтоздесь проблема, так как я выполняю граничные проверки и - что более удивительно: он работает на других входах, когда я тестировал его раньше!
В общем, что может вызвать ошибку сегментации при использовании 'delete', и как я могу предотвратить такие ошибки в моем коде?
Кроме того, у меня есть деструктор для класса' thread ', содержащий одну строку:
delete (_stack);
где _stack - этосимвол *, который я выделил в Ctor.
Вот мои поля объекта 'thread':
char* _stack;
int _tid;
void (*_thread_func)(void);
sigjmp_buf _jbuf;
Sync* _sync;
int _status;
В Ctor 'thread' есть (между другими) эта строка:
_stack = new char[STACK_SIZE];
Иэто его Dtor:
delete[] _stack;
В моей большой программе у меня есть это объявление:
vector<thread*> _library;
Есть ли проблема с использованием «delete» внутри моего деструктора вместо «бесплатно?