【问题标题】:Boost Test and QtTest memory access violation with BotanBoost Test 和 QtTest 内存访问冲突与 Botan
【发布时间】:2015-03-31 03:01:24
【问题描述】:

我一直在努力解决这个问题,但到目前为止还没有成功。使用 botan 的简单 main 工作正常,但是当我将相同的代码放入单元测试时它失败了。

// keygeneration_test.cpp

#define BOOST_TEST_DYN_LINK 
#include <boost/test/unit_test.hpp> // shuold use this one if using dynamic linking
#include <botan\botan.h>
#include <botan\rsa.h>

BOOST_AUTO_TEST_SUITE(keygeneration_suite)

BOOST_AUTO_TEST_CASE(rsa_key_generation)
{
    BOOST_TEST_MESSAGE("generating key");
    try
    {
        Botan::LibraryInitializer init;

        Botan::AutoSeeded_RNG rng;
        rng.reseed(10096);
        Botan::RSA_PrivateKey rsaPrivate(rng, 1024);
    }
    catch (std::exception& e)
    {
        BOOST_TEST_MESSAGE(e.what());
    }
}

BOOST_AUTO_TEST_SUITE_END()

--

// main.cpp

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE cryptography test //module define should be only here, it takes care of creating entry point

#include <boost/test/unit_test.hpp> // should use this one if using dynamic linking

然后我尝试将 init 放在主入口点,如下所示:

//main.cpp

#define BOOST_TEST_DYN_LINK // Make the exe link dynamically
#define BOOST_TEST_NO_MAIN

#include <boost/test/unit_test.hpp> // should use this one if using dynamic linking

#include <botan\botan.h>

bool init_function()
{
    return true;
}

int main(int argc, char* argv[])
{
    Botan::LibraryInitializer init;
    return boost::unit_test::unit_test_main(&init_function, argc, argv);
}

它们都显示相同的错误:

正在运行 1 个测试用例...未知位置 (0):致命错误 “rsa_key_generation”:地址发生内存访问冲突 0x00141000,试图读取不可访问的数据时

*** 在测试套件“密码学测试”中检测到 1 个故障检测到内存泄漏!倾倒对象 -> {670} 普通块 0x0000000000221380,16 个字节长。数据:78 EA 13 00 00 00 00 00 00 00 00 00 00 00 00 00 对象转储完成。

仅作记录,我尝试过的简单压缩测试或我所做的任何事情都可以正常工作,但是当我尝试使用植物初始化创建测试时,无论我尝试什么都会失败。


编辑:我已经尝试过使用 Qt Test 并且发生了同样的情况。它真的很奇怪。有没有人经历过这样的事情?谁能重现这个?

【问题讨论】:

    标签: boost-test botan qttest


    【解决方案1】:

    发现了烦人的问题。代码生成设置为多线程调试 DLL。出于某种原因,更改为多线程 DLL 使其工作。我想可能是因为 botan 是为发布而编译的。 (如果有编译器的提示或建议会很好......)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 2017-09-06
      • 2012-05-22
      • 2014-09-16
      • 2013-03-31
      • 1970-01-01
      • 2017-01-08
      相关资源
      最近更新 更多