-1

我这里有一个代码。我正在使用 malloc 为我的结构分配内存。该结构的一个成员在 while 循环中使用 StrDup 分配了一个字符串,尽管其他成员不必更改它们的值。现在,当我使用 StrDup 时,我必须清理内存,否则会出现内存泄漏,但内存清理会破坏我的 struct malloc。我该怎么办?提前致谢。

    do
    {
       if( pURL == NULL )
           break ;
       pData->URL = StrDupA(pURL) ;

    }while(pURL != NULL) ;
4

2 回答 2

1

好吧,简单的答案是,您必须pData->URL在将其替换为StrDupA. 像这样:

pData->URL = NULL ;
do
{
    pURL = //Some Function Here
    LocalFree(pData->URL) ;
    pData->URL = StrDupA(pURL) ;
}while(pURL != NULL) ;

至于正在引发的异常,您在评论中声明在某些时候pURLNULL. 当这种情况发生时StrDupA将失败。我真的无法就如何解决这个问题向您提供建议,因为我无法理解这段代码试图做什么。

您很可能还泄漏了由 assigns 函数创建的内存pURL

我不明白为什么要使用StrDupA而不是strdupC 运行时提供的。您是StrDupA从 Shlwapi.dll 调用的。这对我来说毫无意义。从 C 运行时调用一个并用 good old 释放内存free()

我也不明白为什么循环终止被设计为显然永远不会终止。除了这个单独的 do while 循环之外,我还没有看过你的任何代码。

于 2012-02-22T12:42:19.857 回答
0

我找到了解决方案。Struct 的 Malloc 应该在 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) ;

因为所有线程都有自己的结构

于 2012-02-23T05:13:56.670 回答