переполнение буфера с помощью boost::program_options

У меня проблема с использованием boost:program_options

эта простая программа, скопированная из документации boost:

#include <boost/program_options.hpp>

int main( int argc, char** argv )
{

    namespace po = boost::program_options;

    po::options_description desc("Allowed options");
    desc.add_options()
        ("help", "produce help message")
        ("compression", po::value<int>(), "set compression level")
        ;
    return 0;
}

происходит сбой с переполнением буфера.

Я активировал «переключатель безопасности буфера», и когда я запускаю его, я получаю «неизвестное исключение (0xc0000409)», когда перехожу через строку desc.add_options()...

Я использую Visual Studio 2005 и повышаю 1.43.0.

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

Так у вас есть решение этой проблемы?

ИЗМЕНИТЬ Я обнаружил проблему, связанную с libboost_program_options-vc80-mt.lib, которая не была хорошей библиотекой.


person f4.    schedule 15.06.2010    source источник
comment
Можете ли вы добавить, какую версию boost вы используете?   -  person Nikolai Fetissov    schedule 15.06.2010
comment
Я добавил это. Это версия 1.43.0   -  person f4.    schedule 15.06.2010
comment
Вам не нужно вручную связываться в VS. Boost использует директивы pragma для связывания.   -  person Edward Strange    schedule 15.06.2010
comment
да, я понял это после добавления libboost_program_options-vc80-mt.lib в список и забыл его удалить, особенно после того, как я изменил библиотеку времени выполнения на Multithread DLL!   -  person f4.    schedule 15.06.2010
comment
Вы должны добавить свою реализацию в качестве ответа, F4. Через день или два вы можете принять его как правильный ответ.   -  person Rob Kennedy    schedule 15.06.2010


Ответы (2)


Это работает в 2010 году. Собирался попробовать в 2005 году, но понял, что у меня нет 1.43, скомпилированного в этой среде.

person Edward Strange    schedule 15.06.2010

Я обнаружил проблему, которую я связывал с libboost_program_options-vc80-mt.lib, которая не была хорошей библиотекой, поскольку я изменил библиотеку времени выполнения на многопоточную DLL.

person f4.    schedule 15.06.2010