指向表的指针导致符号无法加载

时间:2011-09-14 21:23:31

标签: c++ pointers symbols

我的程序中有几个大表,我正在尝试编写一个类来为这些表提供通用接口。每个表都在自己的头文件中,并包含一个const double数组和几个描述表布局的变量。所有表都包含在我的预编译头中。

我的类只有一个初始化函数,它确定要使用哪个表,然后将其成员变量设置为适当的值,并将其双指针设置为数组的第一个元素。我有一些#defines确定要使用哪一组表,然后是一个枚举,我将其传递给initialize函数以确定给定集合中要使用的表。所以我的初始化函数如下:

void CMyClass::initialize(enum mode)
{
#ifdef VERSION1
    switch (mode)
    {
        case mode1:
        m_Data = &tableVersion1Mode1[0];
        //set member variables
        break;

        case mode2:
        m_Data = &tableVersion1Mode2[0];
        //set member variables
        break;

        case mode3:
        m_Data = &tableVersion1Mode3[0];
        //set member variables
        break;
    }
#endif

#ifdef VERSION2
    switch(mode)
    {
        //same thing
    }
#endif

//etc etc
}

问题是在某些情况下,未加载此程序的调试符号,并且没有命中任何断点。我已经将问题缩小到这个类中的双指针,因为我只能注释掉这个成员变量,问题就消失了。但我对它的行为感到困惑。

如果我在每种情况下将指针设置为不同的表,如上所述,则不会加载任何符号。

如果我注释掉其中一个指针赋值,无论是哪个,都会加载符号并且一切正常。

如果我将指针设置为同一个数组中的任何两个或全部三种情况,那么符号就会被加载,一切正常。

我对这个主题进行了一些研究,我知道如果没有加载符号,那么它可能是.pdb文件的一个问题。我试过手动加载.pdb,它说它不匹配。但是,如果我在可执行文件和.pdb上运行ChkMatch.exe,它表示它们匹配。那是怎么回事?

0 个答案:

没有答案