LINUX.ORG.RU

iconv


0

0

У меня при вызове iconv_open зависает. Т.е. до него доходит нормально, я перед вызовом проверяю параметры - один у меня статический UTF-8, второй - динамически сформированная строка (строка=windows-1252). И вот вызов висит.
При этом я параллельно пробовал запускать iconv (весь цикл опен-преобразование-клосе) - там все работает нормально.
Кто-нибудь сталкивался с подобным?
Где тут могут быть подводные грабли?

★★★★★

$ vim iconv.c
$ gcc iconv.c 
$ ./a.out 
Argument required
$ ./a.out windows-1252
Success
$ ./a.out windows
iconv_open(): Invalid argument
$ cat iconv.c 
#include <iconv.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main(int argc, char** argv) {
	iconv_t h;
	if (argc < 2) {
		printf("Argument required\n");
		return 1;
	}
	h = iconv_open("UTF-8", argv[1]);
	if( (iconv_t)-1 == h )
	{
		perror("iconv_open()");
		return 2;
	}
	printf ("Success\n");
	return 0;
}


попробуй посмотреть в отладчике что _реально_ передается тем самым динамическим параметром

cobold ★★★★★
()
Ответ на: комментарий от cobold

Прошу прощения у всех, у кого отнял время этим постом.
Оказалось, что у меня к тому моменту разрушалась куча (heap) и iconv_open уходил в постоянный цикл (видимо память не мог динамически выделить).
Жаль, что создатели библиотеки не поставили какой-то потолок для кол-ва запросов к выделяемой памяти. Если бы вылетала стандартная ошибка, что malloc нашел поврежденную память - наверное я бы быстрее понял, где искать ошибку.

trex6 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.