yulei1983 发表于 2013-8-20 09:20:51

LR脚本有点内存泄漏~请教原因

脚本代码如下,为了说明问题所以简化了:
char * FindPos = NULL;

        if ((FindPos = (char *)calloc(1024, sizeof(char))) == NULL)
                {
                        lr_error_message("Insufficient memory available");
                        return -1;
                }
       free(FindPos);
        return 0;
}
以上代码放在action中迭代运行,发现内存会慢慢增加~最后吃掉所有内存.

云层 发表于 2013-8-20 12:32:34

你return -1后就没机会free了吧

yulei1983 发表于 2013-8-20 17:28:31

本帖最后由 yulei1983 于 2013-8-20 17:31 编辑

但是return -1之前是调用内存不成功啊~不需要释放吧
来个详细的
replacestr(char * sSrc, char *sMatchstr, char *sReplaceStr, long int Tmpsize)
{
int stringlen;
char *NewString = NULL;
char * FindPos = NULL;

FindPos = (char *)strstr(sSrc, sMatchstr);

if ((NewString = (char *)calloc(Tmpsize, sizeof(char))) == NULL)

{

lr_error_message("Insufficient memory available");

return -1;

}

if ((!FindPos)||(!sMatchstr))
{

//lr_error_message("XML is not responsed,arose FindPos is NULL");

free(NewString);

free(FindPos);

return -1;
}
else
{
while (FindPos != NULL)

{

memset(NewString, 0, Tmpsize);

stringlen = FindPos - sSrc;

strncpy(NewString, sSrc, stringlen);

strcat(NewString, sReplaceStr);

strcat(NewString, FindPos + strlen(sMatchstr));

strcpy(sSrc, NewString);

FindPos = (char *)strstr(sSrc, sMatchstr);

}
}

free(NewString);
//free(FindPos);
return 0;
}

yulei1983 发表于 2013-8-20 17:31:55

分配不成功也需要释放一下吗?

yulei1983 发表于 2013-8-20 17:32:44

分配失败也需要free吗?

yulei1983 发表于 2013-8-20 17:35:30

分配失败也需要free吗?

yulei1983 发表于 2013-8-21 09:01:43

调用不成功也需要释放吗?

zhang12247 发表于 2013-8-21 17:28:00

是否需要释放,你为什么不自己尝试的试试?不就都清楚了?

zhang12247 发表于 2013-8-21 17:28:08

是否需要释放,你为什么不自己尝试的试试?不就都清楚了?
页: [1]
查看完整版本: LR脚本有点内存泄漏~请教原因