最近发现第3方提供的 API, 引起内存不断增大,代码如下:
int retVal = kill(pSharedData->regBuffPids[i],0);
if (retVal == 0)
{
LOGE("Signal Sent Successfully....");
return false;
}
else
{
LOGE("Kill failed....");
}
if (errno == EPERM)
{
LOGE("signal permission failure!");
return false;
}
else if (errno == EINVAL)
{
LOGE("invalide signal");
return false;
}
else if (errno == ESRCH)
{
LOGE("no process found for the specific pid");
release_share_memory();
}
它用 kill(pid,0) 检查进程是否存在,不存在,就释放共享内存。
但其实我们发现运行 LOGE() , errno 期望是3, 但却变成 2 ,原来我们自己改动过的 LOGE() 中调用了 localtime, 它读不到时区文件,所以把 errno 设置成 2
因此不要相信 errno 可靠, 有必要先用临时变量保存。
int retVal = kill(pSharedData->regBuffPids[i],0);
int errnoVal = errno;
if (retVal == 0)
{
LOGE("Signal Sent Successfully....");
return false;
}
else
{
LOGE("Kill failed....");
}
if (errnoVal == EPERM)
{
LOGE("signal permission failure!");
return false;
}
else if (errnoVal == EINVAL)
{
LOGE("invalide signal");
return false;
}
else if (errnoVal == ESRCH)
{
LOGE("no process found for the specific pid");
release_share_memory();
}
本文详细介绍了如何解决第三方API引入的内存泄露问题,通过正确处理errno值,避免了误操作导致的错误。文章还提供了解决方案,包括使用临时变量保存errno值,并对代码进行了修正,确保了程序的稳定性和内存的有效管理。
678

被折叠的 条评论
为什么被折叠?



