下面代码 为什么不直接DbComm_FreeMem(pStrTemp);释放内存:DBString *pStrTemp = NULL; long lRet = pDbi->GetTagName(pdwTagId,pAlmLogInfoAll->lAlmCount,TRUE, &pStrTemp); DbComm_FreeMem((char**)&pStrTemp);
时间: 2024-03-29 16:35:19 浏览: 78
让free后立即释放内存
根据代码片段,可以看出pStrTemp是一个DBString类型的指针,它指向的内存是由GetTagName函数动态分配的。如果直接使用DbComm_FreeMem(pStrTemp)释放内存,会导致内存泄漏,因为GetTagName函数分配的内存并不是使用malloc函数分配的普通内存,而是使用类似于new操作符的方式分配的内存。因此,必须使用DbComm_FreeMem((char**)&pStrTemp)来释放内存,这样才能正确地释放GetTagName函数分配的内存,并避免内存泄漏的问题。该函数的实现中,将DBString类型的指针强制转换为了char**类型的指针,这是因为DbComm_FreeMem函数的参数类型是char**,所以必须进行强制类型转换。
阅读全文