я создаю новый struct SThreadInfo
в функции:Удаление памяти, на которую указывает пустой указатель
struct SThreadInfo {
int function;
Exchange* pThis;
};
struct SThreadInfo *threadInfo = new (struct SThreadInfo);
threadInfo->function = 0;
threadInfo->pThis = this;
Тогда, в одной и той же функции, я создаю новый поток передать как-структуру ничтожной-указатель:
pthread_t ret;
pthread_create(&ret, NULL, Exchange::staticThreadHelper, (void*)threadInfo);
В новом потоке, я перестраивать-структуру из пустой-указатель:
void* Exchange::staticThreadHelper(void* t)
{
struct SThreadInfo* threadInfo = (struct SThreadInfo*)t;
//....
//....
}
В конце этой функции я хочу удалить память, выделенную t
и threadInfo
. К настоящему времени, он работает для threadInfo
, но не для t
delete threadInfo;
delete static_cast<struct SThreadInfo*>(t);
Когда я пытаюсь бросить пустоты указателя обратно в SThreadInfo, SIGABRT поднимается. Может ли кто-нибудь сказать мне, как правильно удалить память из указателя void?
@CaptainObvlious: Действительно? Разумеется, компилятор должен жаловаться на точку компиляции в этом случае. Проблема не в том, что у «двойного удаления», другими словами, OP пытается дважды удалить один и тот же объект? –
Посмотрите на последний фрагмент кода - я пытаюсь использовать static_cast – Bobface
Похоже, вы удаляете память дважды: один раз через t и один раз через threadInfo. Поскольку threadInfo - это всего лишь тэг t, оба указывают на один и тот же объект, который можно удалить только один раз. – antlersoft