gpt4 book ai didi

c - free() 在Solaris 10 的稀疏区域上随机返回SIGSEGV。为什么?

转载 作者:行者123 更新时间:2023-11-30 19:46:09 24 4
gpt4 key购买 nike

我正在开发一个开源工具“zabbix”,它在 Solaris 10 的 RHEL/全局区域上运行得非常好。但是当我尝试在 Solaris 10 的稀疏区域上运行此工具时,问题似乎很困惑。稀疏区域,该工具有时可以工作,有时会因 SIGSEGV 信号而崩溃。当释放变量分配的内存时会引发此信号。

请参阅下面引发此信号的确切代码:

void    free_request(AGENT_REQUEST *request)
{
int i;

zbx_free(request->key);

for (i = 0; i < request->nparam; i++)
zbx_free(request->params[i]);
zbx_free(request->params);

request->nparam = 0;
}

请注意,这部分代码可以在 Linux 或 Solaris 10 的任何全局区域上完美运行。

现在,您可能会指出 zbx_free() 可能正在尝试释放一些已经释放的变量。我会说,不。因为我已经调试了代码,发现在 zbx_free() 尝试释放变量并因此引发 SIGSEVG 信号之前,变量的分配是合法的。

您可能想查看宏zbx_free(request->key)(它是一个宏,但功能)。请看下面,因为这也很简单。

do              \
{ \
if (request->key) \
{ \
free(request->key); \
request->key = ((void *)0); \
} \
} \
while (0)

所以,在我看来,问题徘徊在“稀疏区域”和“全局区域”之间。我假设,全局区域将稀疏区域限制为 free() 内存分配。如果这是真的,那么有人可以帮我解决这个问题吗?请建议我解决方法(如果有)。

感谢您的宝贵时间。

问候,

罗希特

最佳答案

@Petesh:

抱歉我上次的回答。虽然它确实有效了一段时间,但并不是绝对的解决方案。该工具在释放内存以及内存分配时崩溃了几次。

后来我在Linux上尝试valgrind找到了解决方案。我发现了一些 malloc 的不当使用(例如内存分配的大小较小等)。我修复了它们,发现释放问题从未消失。该工具目前还没有崩溃过。感谢 Valgrind 和 @Peetesh 的推荐。

关于c - free() 在Solaris 10 的稀疏区域上随机返回SIGSEGV。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24426833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com