Deleting memory pointed to by a void pointer
我正在一个函数中创建一个新的
1 2 3 4 5 6 7 8 | struct SThreadInfo { int function; Exchange* pThis; }; struct SThreadInfo *threadInfo = new (struct SThreadInfo); threadInfo->function = 0; threadInfo->pThis = this; |
然后,在同一个函数中,我创建一个新线程,并将结构作为空指针传递:
1 2 | pthread_t ret; pthread_create(&ret, NULL, Exchange::staticThreadHelper, (void*)threadInfo); |
在新线程中,我从空指针重新生成结构:
1 2 3 4 5 6 | void* Exchange::staticThreadHelper(void* t) { struct SThreadInfo* threadInfo = (struct SThreadInfo*)t; //.... //.... } |
在这个函数的末尾,我想删除
1 2 | delete threadInfo; delete static_cast<struct SThreadInfo*>(t); |
当我试图将空指针强制转换回sthreadinfo时,会引发sigabrt。有人能告诉我如何正确地从空指针中删除内存吗?
线:
1 | struct SThreadInfo* threadInfo = (struct SThreadInfo*)t; |
不"重建"任何东西,它只为声明的变量分配类型转换值。它是同一个指针。
在函数的最后,您似乎要删除(释放)同一个地址两次,这就是您得到异常的原因。
所以,这里的问题是你有一个内存块,你有两个不同的指针。
您应该只释放一次分配的内存。如果您有一个带有析构函数的对象[包括具有隐含的析构函数的对象,例如包含另一个带有析构函数的对象的对象,如
因此,在这种情况下,要么是