我刚刚升级到第三方库的新版本(QtPropertyBrowser for Qt 5.0)。升级导致我的应用程序中出现一个新错误,我设法跟踪到库中的静态函数。该函数包含一个静态变量,该变量在第一次调用该函数时被初始化。我在初始化后复制了该变量的内存位置,并发现,正如预期的那样,在多个后续调用中,该变量仍保留在同一内存位置。然后在随后的函数调用中,我注意到静态变量中的内存位置和数据发生了变化(导致我的程序出现错误)。
代码看起来像这样:
class ClassA
{
//....
};
class ClassB
{
public:
ClassA* ptrMember;
};
static ClassA *theFunction()
{
static ClassB statVar = {0};
if(!statVar.ptrMember)
statVar.ptrMember = new ClassA();
return statVar.ptrMember;
}
我发现在多次调用中theFunction()
存储的地址&statVar
始终保持不变,但在随后的调用中,地址&statVar
不同并且statVar.ptrMember
为空。
我不认为这是可能的!有任何想法吗?