我这里有代码。我正在使用malloc为我的struct分配内存。虽然其他成员不必更改其值,但是在while循环中使用StrDup为此结构的一个成员分配了一个字符串。现在,当我使用StrDup时,我必须清理内存,否则会出现内存泄漏,但内存的清理会破坏我的struct malloc。我该怎么办?在此先感谢。
do
{
if( pURL == NULL )
break ;
pData->URL = StrDupA(pURL) ;
}while(pURL != NULL) ;
答案 0 :(得分:1)
嗯,简单的答案是,在用pData->URL
的结果替换它之前,您必须释放StrDupA
。像这样:
pData->URL = NULL ;
do
{
pURL = //Some Function Here
LocalFree(pData->URL) ;
pData->URL = StrDupA(pURL) ;
}while(pURL != NULL) ;
对于正在引发的异常,您在评论中指出某些时候pURL
为NULL
。发生这种情况时StrDupA
将失败。我无法真正建议你如何解决这个问题,因为我无法理解这段代码试图做的事情。
您很可能也会泄漏由指定pURL
的函数创建的内存。
我无法理解为什么要使用StrDupA
而不是C运行时提供的strdup
。您正在从Shlwapi.dll调用StrDupA
。这对我来说毫无意义。从C运行时调用一个,并使用旧的free()
释放内存。
我也不明白为什么循环终止被设计为显然永远不会终止。除了这个单独的while循环之外,我没有看过你的任何代码。
答案 1 :(得分:0)
我找到了解决方案。 Malloc of Struct应该在do-while循环中完成,因为它将允许每个线程独立工作。现在唯一的问题是初始化pData-> hEvent和pData-> hSemaphore。
//Before entering do-while loop
hEvent = CreateEvent....;
hSemaphore = CreateSemaphore......;
//inside do-while loop
pData->hEvent = hEvent ;
pData->hSemaphore = hSemaphore ;
//Now in ClearMemory() Function
LocalFree(pData->URL) ;
free(pData) ;
因为所有线程都有自己的struct