您能告诉我更多有关该功能的信息吗?
您想了解他们什么?您在其中找到它们的手册中对它们进行了非常清楚的描述。
它们有点类似于 Win32,LocalAlloc并且LocalLock— 您可以获得内存对象的句柄,但要获得该对象的可用地址需要额外的步骤。这些通常是一个坏主意,除非在内存极其有限的系统上。
他们还在 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");
}
Run Code Online (Sandbox Code Playgroud)
你能发现这个错误吗?
程序有时会成功,有时会因非零退出代码而失败,有时会因SIGSEGV.