Можете ли вы рассказать мне больше об этих функциях?
Что вы хотите знать о них? Они довольно четко описаны в руководстве, в котором вы их нашли.
Они чем-то похожи на Win32 LocalAlloc
и LocalLock
— вы получаете дескриптор объекта памяти, но для получения пригодного для использования адреса этого объекта требуется дополнительный шаг. Как правило, это плохая идея, за исключением систем с очень ограниченным объемом памяти.
Они все еще в Glibc?
No.
Если нет, то почему их убрали?
Потому что они, как правило, плохая идея и размножаются до труднодоступных ошибок.
Обновление:
Какие ошибки возможны при использовании чего-то подобного?
Вот пример:
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
.
person
Employed Russian
schedule
10.10.2015