Общая ошибка защиты при использовании Valgrind - PullRequest
0 голосов
/ 27 мая 2020

Заранее приносим свои извинения за то, что я не добавлял код, поскольку у меня нет разрешения на это.

У меня есть программа, которая дает сбой в некоторых системах через разное время в диапазоне от 2 до 10 секунд после запуска с Valgrind массивный инструмент. Выполнение того же самого с gdb или запуск приложения в неизменном виде не вызывает сбоев.

Это отлично работает - valgrind --tool=massif --pages-as-heap=yes ./<prog> <prog_args>

Это приводит к прерыванию программы с помощью SIGSEGV valgrind --tool=massif --stacks=yes ./<prog> <prog_args>

Функция в верхней части трассировки, когда программа завершается с помощью Valgrind, похожа на Итак, номер строки, указывающий на оператор условия if с флагами:

<enum_type>
tmr_fn(ctx *ctx, tmr_t *tmr, const char *fn, unsigned int ln)
{
    int ret = ENUM_0
    if (ctx == NULL || tmr == NULL)
        return (ENUM_ERR);

    if (tmr->flags & 0x1) {
        tmr->flags |= 0x2;
        return (0);
    }
...
}

Я попытался найти ответы, но пока не нашел ничего полезного. Любая помощь или указатели были бы действительно замечательными!

1 Ответ

0 голосов
/ 28 мая 2020

Запуск программы с memcheck показал неинициализированные значения. Я понял, что структура tmr была объявлена, но memset не был выполнен и имел некоторые значения мусора. Это вызвало проблемы в tmr_fn, который был вызван в подпрограмме освобождения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...