LINUX.ORG.RU

C memory troubles


0

0

Добрый день. В общем проблема такая:

#0  0x002147a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
#1  0x002547f5 in raise () from /lib/tls/libc.so.6
#2  0x00256199 in abort () from /lib/tls/libc.so.6
#3  0x002884ea in __libc_message () from /lib/tls/libc.so.6
#4  0x002937fb in free_check () from /lib/tls/libc.so.6
#5  0x0028ef95 in free () from /lib/tls/libc.so.6
#6  0x002dd828 in freeaddrinfo () from /lib/tls/libc.so.6


Программу запускал с MALLOC_CHECK_=3

Есть core dump. Никак не могу понять в чем проблема. Проявляется 
крайне редко.

В общем суть кода (данной функции) такова:
две структурки res и res_l:

if ((err = getaddrinfo(host, port, &hints, &res))) {
		if (err == EAI_NONAME)
			return -1;
		err_fin_gai(err, "getaddrinfo()");
	}

if ((err = getaddrinfo(local, NULL, &hints, &res_l))) {
		freeaddrinfo(res);
		if (err == EAI_NONAME)
			return -1;
		err_fin_gai(err, "getaddrinfo()");
	}

потом с одной делаем bind() и freeaddrinfo(res_l), со второй connect()
и freeaddrinfo(res).
Вот на последней фриаддринфо и вываливается (но очень редко! с чем это
связано как раз и не могу понять).

Программа многопоточная.
В общем вопрос больше такой - проблемы с памятью где то в этой функции
 либо могут начаться раньше ? В принципе с опцией MALLOC_CHECK_=3
по-моему при первом же free() должны обнаружиться косяки с памятью ?
Но freeaddrinfo(res_l) же проходит нормально, а между ним 
и freeaddrinfo(res) только коннект. В общем подскажите, куда копать...
★★★★★

стоит попробовать valgrind

anonymous
()

а коли первый getaddrinfo() вернёт не EAI_NONAME, а другую ошибку? что будет делать freeaddrinfo() с пустым res?

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

Будет err_fin_gai(err, "getaddrinfo()"); и на этом программа закончится

на самом деле valgrind прекрасная чтука, но тормозит под ней програма жесткоко и ошибка не появляется. Ошибка и так редко выпадает...

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