2016-02-04 1 views
0

Valgrind сообщает об ошибке для кода последующейValgrind: Использование инициализированы значения из станд :: строки :: назначить

void test(const std::vector<string> &strvec) { 
    string val; 
    if (strvec.size() > 0) { 
    val = strvec.front(); // use of uninitialized value of size 8 
    } 
} 

Извините, что я не могу отправить полный код, потому что это зависит от многих других вещей. Это всего лишь простой снимок кода.

Поскольку valgrind не сообщает никаких ошибок о размере(), проверьте, так что я думаю Я должен быть в состоянии получить его фронт. Но я не понимаю, почему он жалуется на доступ к неинициализированным ценностям.

+3

Если вы используете [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve), используя этот фрагмент, то valgrind все равно дает тот же результат? –

+0

Несвязанный, я думаю 'if (! Strvec.empty()) {' является более идиоматической проверкой/тестом. –

+0

Нам нужно увидеть, как определяется 'strvec' и его содержимое, как говорит @JamesAdkison. –

ответ

0

Я нашел проблему.

С точкой зрения https://blog.mozilla.org/nnethercote/2009/02/27/eliminating-undefined-values-with-valgrind-the-easy-way/

На самом деле, когда какие-либо действия зависят от ранее скачки, вызванной доступа неопределенных переменных, он сообщает ту же ошибку для этих действий.

В моем случае эта ошибка зависит от проверки if, которая находится далеко отсюда, но путь кода действительно зависит от этого.

Имеет ли valgrind возможность сообщать об «первопричине»?

+1

Задавая вопрос в ответе, скорее всего, не даст очень хороших результатов. Если вы еще не нашли ответа, вам бы хотелось задать новый вопрос. –

+0

См. Http://stackoverflow.com/questions/35217336/can-valgrind-report-only-the-root-cause-of-reading-uninit-var –

 Смежные вопросы

  • Нет связанных вопросов^_^