我在函数中创建一个新的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;
    //....
    //....
}

在此函数的结尾,我想删除tthreadInfo分配的内存。到目前为止,它适用于threadInfo,但不适用于t
delete threadInfo;
delete static_cast<struct SThreadInfo*>(t);

当我尝试将空指针投射回SThreadInfo时,将引发SIGABRT。
有人可以告诉我如何正确地从空指针删除内存吗?

最佳答案

该行:

struct SThreadInfo* threadInfo = (struct SThreadInfo*)t;

不会“重建”,它只是将类型强制转换值分配给声明的变量。这是相同的指针。

在该函数的末尾,您似乎要删除(释放)相同的地址两次,这就是为什么会出现异常的原因。

10-08 11:40