我在函数中创建一个新的struct SThreadInfo
:
struct SThreadInfo {
int function;
Exchange* pThis;
};
struct SThreadInfo *threadInfo = new (struct SThreadInfo);
threadInfo->function = 0;
threadInfo->pThis = this;
然后,在同一函数中,我创建一个新线程,并将该结构传递为void指针:
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。
有人可以告诉我如何正确地从空指针删除内存吗?
最佳答案
该行:
struct SThreadInfo* threadInfo = (struct SThreadInfo*)t;
不会“重建”,它只是将类型强制转换值分配给声明的变量。这是相同的指针。
在该函数的末尾,您似乎要删除(释放)相同的地址两次,这就是为什么会出现异常的原因。