我在阅读旧版的glibc文档(链接)时,看到了三个奇怪的函数,之前从未见过(r_alloc,r_alloc_free和r_re_alloc)。我认为它们实现的是一个分配器,用于重新分配内存以进行碎片整理,但我在其他任何地方都找不到更多信息。
你能告诉我更多关于这些函数的信息吗?它们是否仍然存在于Glibc中?如果不再使用,为什么会被删除?
我在阅读旧版的glibc文档(链接)时,看到了三个奇怪的函数,之前从未见过(r_alloc,r_alloc_free和r_re_alloc)。我认为它们实现的是一个分配器,用于重新分配内存以进行碎片整理,但我在其他任何地方都找不到更多信息。
你能告诉我更多关于这些函数的信息吗?它们是否仍然存在于Glibc中?如果不再使用,为什么会被删除?
const char *my_strcat(const char *a, const char *b)
{
const size_t len_a = strlen(a);
const size_t len_b = strlen(b);
char *handle;
if (r_alloc((void**)&handle, len_a + len_b + 1) == NULL) return NULL;
memcpy(handle, a, len_a);
memcpy(handle + len_a, b, len_b + 1);
return handle;
}
// There are memory leaks here. Ignore them for now.
int main()
{
const char *result = my_strcat("abc", my_strcat("def", "ghi"));
return strcmp(result, "abcdefghi");
}
你能发现错误吗?
该程序有时会成功,有时会失败并显示非零退出代码,有时还会崩溃并显示SIGSEGV
。
malloc()
,也可能出现这种错误。 ;) - Andrew Henle