Gtest和Gmock - 双重免费或腐败

时间:2016-12-31 02:12:49

标签: c++ qmake googletest gmock

我浪费了很多时间来解决这个问题,但没有成功。首先,我的配置:Ubuntu 16.04.1,qmake 3.0,cmake 3.5.1,共享gtest和gmock库,版本1.8.0。我使用Qt Creator,这是导致迷恋的最小程序的一个小例子。

main.cpp中:

class SomeModel extends Model
{
    public $some_attribute = 'some value';
    // ...

google_test.pro:

#include <iostream>
#include <gtest/gtest.h>
#include <gmock/gmock.h>

using namespace std;

class A {
    void print() {
        std::cout << "PRINT" << std::endl;
    }
};

class B: public A {
    MOCK_METHOD0(print, void());
};

TEST(MOCK, TEST) {
    B b;
}

int main(int argc, char *argv[])
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

测试没问题,但在程序结束时我收到此错误:

*`/ home / aminought / QtProjects / build-google_test-Desktop_Qt_5_7_0_GCC_64bit-Debug / google_test'出错:双重免费或损坏(!prev):0x0000000001a51270 *

如何解决此错误?非常烦人。

2 个答案:

答案 0 :(得分:1)

只有将google test编译为共享库才会出现此问题。我不知道为什么,但简单地将共享库替换为静态可以解决问题。

答案 1 :(得分:0)

已经发布了几年了。 我无法重现您遇到的确切问题, 但最近我遇到了相同的错误消息, 另一种情况。

问题是,我故意重写了 TearDown(),释放灯具类的受保护成员, 这导致了两次释放指针。看起来 googletest跟踪分配的内存并尝试 自动释放所有内容,即使我的TearDown() 覆盖以前已经做过的。删除已解决的替代 我的问题。

我希望将来对某人有用。

就我而言,动态链接没有任何作用。