【问题标题】:buffer overflow with boost::program_optionsboost::program_options 缓冲区溢出
【发布时间】:2010-06-15 15:26:22
【问题描述】:

我在使用 boost:program_options 时遇到问题

这个简单的程序,从 boosts 的文档中复制粘贴:

#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;
}

因缓冲区溢出而失败。

我已经激活了“缓冲安全开关”,当我运行它时,当我越过desc.add_options()...这一行时,我得到一个“未知异常(0xc0000409)”

我使用 Visual Studio 2005 和 boost 1.43.0。

顺便说一句,如果我停用开关,它确实会运行,但这样做我感觉不舒服...除非可以在本地停用它。

那么你有解决这个问题的办法吗?

编辑 我发现了问题 我正在链接 libboost_program_options-vc80-mt.lib 这不是好的库。

【问题讨论】:

  • 您可以添加您正在使用的 boost 版本吗?
  • 我添加了它。它的版本是 1.43.0
  • 你不需要在VS中手动链接。 Boost 使用 pragma 指令进行链接。
  • 是的,我在将“libboost_program_options-vc80-mt.lib”添加到列表后发现了这一点,但我忘了删除它,尤其是在我将运行时库更改为多线程 DLL 之后!
  • 你应该添加你的实现作为答案,F4。一两天后,您可以接受它作为正确答案。

标签: c++ visual-c++ boost boost-program-options


【解决方案1】:

它在 2010 年工作。正准备在 2005 年尝试,但意识到我没有在那个环境中编译 1.43。

【讨论】:

    【解决方案2】:

    我发现我与 libboost_program_options-vc80-mt.lib 链接的问题不是好的库,因为我将运行时库更改为多线程 DLL。

    【讨论】:

      猜你喜欢
      • 2013-02-10
      • 2015-12-16
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 2013-11-06
      • 2013-04-11
      • 2015-07-07
      • 2012-02-05
      相关资源
      最近更新 更多