测试正文中抛出代码为0xc0000005的SEH异常

chi*_*n s 24 c++ tdd googletest visual-c++

我正在使用GoogleTest为以下课程编写测试,我收到了上述错误.

class Base
{
    // Other Functions;

    CSig objSig[50];
}
Run Code Online (Sandbox Code Playgroud)

Class CSig如下:

class CSig
{
    //... constructor, destructor(empty) and some functions
    CMod *objMod;
    CDemod *objDemod;
}

CSig :: CSig
{
    bIsInitialised = false;

    for (int i=0; i<MAX_NUM; i++)
    {
        PStrokePrev[i] = 0.0;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我丢弃时CSig objSig[50],测试运行正常.

我该怎么做才能解决这个问题?另外,我需要CSig objSig[50]在Base类中.

Mad*_*ist 27

SEH(结构化异常处理)异常不是C++ - 可以使用c ++语言结构(try-catch)处理的异常,但它是从windows本身引发的,并指向一些基本缺陷.SEH-异常非常烦人,因为它们不会导致正常的堆栈展开,这会导致未关闭的文件或未解锁的互斥锁,这些互斥锁通常应由拥有对象的析构函数清除.我在访问不属于当前进程的内存时遇到了SEH异常,因此我建议在CSig的构造函数和析构函数中查看与内存相关的指令.你可以在这里阅读有关SEH的内容


Mic*_*ele 11

我刚刚发现问题的方法是在Visual Studio中我去了Debug-> Exceptions,并检查了第一列中的所有内容.然后运行/调试您的单元测试,它将在问题所在的行上引发异常.这就是你需要调试/修复它的地方.

  • 对于visual studio 2015:Debug-> Windows-> Exception Settings (5认同)

Mut*_*enu 6

我在Visual Studio 2010中使用GoogleTest遇到了这个问题.我们的设置包括为GoogleTest框架创建一个库,然后将其与我们各自的单元测试相关联.我最近更新了Frameworks支持并从头开始重新编译它.执行此操作后,我遇到了上述异常.

经过一番挖掘后,我发现'Struct Member Alignment'设置是罪魁祸首:

项目属性>配置属性> C/C++>代码生成>结构成员对齐

当Frameworks项目将设置设置为"default"时,相应的Unit Test项目将其配置为"1 Byte/Zp1".一旦我将它们更改为具有相同的对齐方式,问题就消失了.

  • 这个答案让我找到了我的问题。我将测试库配置为“运行时库:多线程 DLL /MD”,将测试应用程序配置为“运行时库:多线程调试 DLL /MDd”。结果,我遇到了与主题相同的错误。谢谢。 (2认同)