游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2184|回复: 2

求助,帮忙看一个产生内存泄露的函数

[复制链接]

83

主题

196

帖子

196

积分

注册会员

Rank: 2

积分
196
发表于 2007-12-29 11:58:00 | 显示全部楼层 |阅读模式
void FillListBox (HWND hwndList)
        
{
        
           int     iLength ;
        
           TCHAR  *pVarBlock,  *pVarBeg,  *pVarEnd,  *pVarName ;
        

           pVarBlock = GetEnvironmentStrings () ;// Get pointer to environment block
        

           while (*pVarBlock)
        
         {
        
           if (*pVarBlock != '=')               // Skip variable names beginning with '='
        
           {
        
              pVarBeg = pVarBlock ;     // Beginning of variable name
        
            while (*pVarBlock++ != '=') ; // Scan until '='
        
            pVarEnd = pVarBlock - 1 ;            // Points to '=' sign
        
            iLength = pVarEnd - pVarBeg ; // Length of variable name
        

            // Allocate memory for the variable name and terminating
        
            // zero. Copy the variable name and append a zero.
        

            pVarName = (TCHAR *)calloc (iLength + 1, sizeof (TCHAR)) ;
        
            CopyMemory (pVarName, pVarBeg, iLength * sizeof (TCHAR)) ;//Copies a block of memory
        
            pVarName[iLength] = '\0' ;
        

            // Put the variable name in the list box and free memory.
        
            SendMessage (hwndList, LB_ADDSTRING, 0, (LPARAM) pVarName) ;
        
            free (pVarName) ;
            
            }
        
            while (*pVarBlock++ != '\0') ;       // Scan until terminating zero
         
        }
        
           FreeEnvironmentStrings (pVarBlock) ;
        
}
调试信息
......
“ENVIRON.exe”: 已卸载“C:\WINDOWS\system32\version.dll”
“ENVIRON.exe”: 已加载“C:\WINDOWS\system32\MSCTFIME.IME”,未加载任何符号。
HEAP[ENVIRON.exe]: Invalid Address specified to RtlFreeHeap( 00140000, 001759EF )
ENVIRON.exe 中的 0x7c921230 处未处理的异常: 用户断点 。
程序“[3480] ENVIRON.exe: 本机”已退出,返回值为 0 (0x0)。
程序“[3480] ENVIRON.exe”已退出,返回值为 0 (0x0)。


在程序代码中注释该函数后,内存泄露的提示消失      

谢谢先

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2007-12-29 13:53:00 | 显示全部楼层

Re:求助,帮忙看一个产生内存泄露的函数

FreeEnvironmentStrings (pVarBlock) ;
pVarBlock经过*pVarBlock++,地址已经变了, 开始应该保存 pVarBlock的初始地址
比如:pVarBlockBeg = pVarBlock;
FreeEnvironmentStrings(pVarBlockBeg);



加QQ群52636340详聊 [em20]

83

主题

196

帖子

196

积分

注册会员

Rank: 2

积分
196
 楼主| 发表于 2007-12-29 14:29:00 | 显示全部楼层

Re: 求助,帮忙看一个产生内存泄露的函数

不错
谢谢 [em19] [em19]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-18 07:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表