valgrind: блоки точно потеряны в записи о потерях … в новой ветке

Я запускаю этот код и получаю это сообщение от Valgrind, я новичок в c ++ и Linux, но я знаю, что должен это исправить. подскажите пожалуйста что не так? Я использую Ubuntu.

Сообщение таково:

==29304== Thread 1:
==29304== 72 bytes in 18 blocks are definitely lost in loss record 55 of 89
==29304==    at 0x402641D: operator new(unsigned int) (vg_replace_malloc.c:255)
==29304==    by 0x4032BBC: GmpPipePlayer::GmpPipePlayer(IOBase*, Referee*, unsigned char, int, DataBoard const*, int, char const*, int) (unixgmppipe.cpp:126)
==29304==    by 0x40329F9: GmpPipePlayer::CreateFunc(IOBase*, Referee*, unsigned char, int, DataBoard const*, void*) (unixgmppipe.cpp:55)

код:
int down [2], up [2];

pipe(down);
pipe(up);

_pid = fork();

if (_pid < 0)
exit(1);if (_pid == 0)
{
close(down[1]);
close(up[0]);

dup2(down[0], 0);
dup2(up[1], 1);

execl("/bin/sh", "sh", "-c", cmd_line, NULL);

_exit(1);
}

close(down[0]);
close(up[1]);
_down = down[1];
_up = up[0];

_reader_thd = new Thread(reader_wrapper, this); //here is the error happening.

функция readre_wrapper имеет вид:

THREAD_Return GmpPipePlayer::reader_wrapper(void *p)

{
GmpPipePlayer *t = (GmpPipePlayer *)p;

t->reader_fn();

return NULL;
}

эта новая тема вызывается много раз. прежде чем я позвоню снова, я делаю следующее:

if (_pid > 0)
{
kill(_pid, SIGTERM);
_pid = 0;
}

if (_up)
{
close(_up);
_up = 0;
}

if (_down)
{
close(_down);
_down = 0;
}

Есть идеи, что не так?

2

Решение

Ну, у вас есть new это никогда не соответствует delete, Вам понадобится delete _reader_thd; в какой-то момент в вашем коде. Или не использовать динамические объекты вообще.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]