Есть функция конвертации строки:
char* convertString(const char* inputString, const char* codePageFrom, const char* codePageTo, size_t &len)
{
	iconv_t iconvHandle = iconv_open(codePageTo, codePageFrom);
	if (iconvHandle == (iconv_t)-1)
	{
		fprintf(stderr, "iconv: cannot convert from %s to %s!\n", codePageFrom, codePageTo);
		return NULL;
	}
	size_t inputStringLength = strlen(inputString);
	size_t outputBufferSize = inputStringLength;
	char* inputBuffer = (char*)malloc(inputStringLength + 1);
	strcpy(inputBuffer, inputString);
	char* outputBuffer = (char*)malloc(outputBufferSize + 1);
	char* outBuf = outputBuffer;
	size_t errorCode = iconv(iconvHandle, &inputBuffer, &inputStringLength, &outBuf, &outputBufferSize);
	if (errorCode == -1ull)
	{
		fprintf(stderr, "iconv: conversion failed!\n");
		iconv_close(iconvHandle);
		return NULL;
	}
	if (errno != 0)
	{
		fprintf(stderr, "iconv: %s\n", strerror(errno));
		iconv_close(iconvHandle);
		return NULL;
	}
	iconv_close(iconvHandle);
	len = strlen(outputBuffer);
	return outputBuffer;
}Вызываю так:
int main()
{
	size_t stringLength;
	char* chars = convertString("я", "UTF-8", "cp1251", stringLength);
	std::cout << "ok " << (int)chars[0] << std::endl;
	
	return 0;
}Работает, вроде, правильно.
Но если перед вызовом вызвать ещё glfwInit, то есть вот так:
int main()
{
	glfwInit();
	size_t stringLength;
	char* chars = convertString("я", "UTF-8", "cp1251", stringLength);
	std::cout << "ok " << (int)chars[0] << std::endl;
	
	return 0;
}Выдаёт ошибку:
iconv: Permission denied
Ошибка сегментирования (стек памяти сброшен на диск)Если перенести вызов конвертации в одну из последующих функций (например, в функцию вывода текстурного шрифта), то выдаёт уже следующее:
iconv: Resource temporarily unavailable
Ошибка сегментирования (стек памяти сброшен на диск)Есть подозрение, что в функции convertString я неправильно выделяю память  Но по-другому оно не работает
  Но по-другому оно не работает  Возвращает строку с нулями (ошибок в консоли при этом нет).
  Возвращает строку с нулями (ошибок в консоли при этом нет).
Код взял отсюда:
Если скопипастить код, ничего в нем не меняя, и вызвать вот так:
int main()
{
	glfwInit();
	char* chars = convert("я", "UTF-8", "cp1251");
	std::cout << "ok " << (int)chars[0] << std::endl;
	
	return 0;
}выдаёт:
iconv: Permission denied
ok -1То есть, выдаёт ошибку и правильный результат.
p.s. Это всё в линуксе.
p.p.s. " Ошибка сегментирования" это, видимо, потому что я обращаюсь к chars, который равен NULL. А вот другие ошибки непонятны 