LINUX.ORG.RU

memory leaks в XOpenDisplay


0

0

минимальный пример,

int main( int argc, char* argv[] ) { mcheck( NULL ); mtrace();

display = XOpenDisplay( NULL ); XCloseDisplay( display );

muntrace(); return 0; }

результат,

bash-3.1$ mtrace malloc.trace

Memory not freed: ----------------- Address Size Caller 0x0804fcc8 0x1a at 0xb724eb30 0x080526b0 0x8 at 0xb7e44452

без X[Open/Close]Display

bash-3.1$ mtrace malloc.trace No memory leaks.

а в моей чудопрограмме 530 таких неосвобождений памяти, я столько раз malloc ещё не успел вызвать, немогут же иксы быть настолько дырявы?

★★

скорее всего структура Display заранее алокейтится при запуске иксов, а ф-я XOpenDisplay возвращает ссылку на статическую переменную. в принципе, это разумнее чем алокейтить память на один и тот же дисплей для каждого приложения, которое хочет его "открыть".

но это всего лишь мои домыслы, наиболее простой под их подтвердить или опровергнуть - посмотреть в сорцы(что и нужно было сделать с самого начала, имхо).

asgard
()

Ты только valgrind не запускай, а то совсем духом падёшь.

Неосвобождение памяти не является дырой кстати, вся память освобождается ОС в конце работы программы, и некоторые алгоритмы специально заточены под это. Хоть это и не есть хороший стиль.

Legioner ★★★★★
()

когда-то наступил на эти грабли, советую не юзать это ковно

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