我最近在使用NDK编译Android控制台程序时遇到了一个奇怪的问题。什么时候在NDK中调用全局变量的C++析构函数?
类声明如下:
class ClassP
{
public:
~ClassP()
int number;
}
ClassP::~ClassP()
{
printf("number=%d", number);
}
主要功能是这样的:
// global variable
ClassP p_instance;
int main()
{
printf("test");
}
当执行程序时,它会输出
test
Segmentation fault
经过一番基本的调试,我发现当调用ClassP的析构函数时,它的成员变量的地址le编号是0.我认为这是因为p_instance在析构函数被调用之前以某种方式被释放。但这种行为并不是我所期望的。当进程退出并且系统试图释放所有对象时,是不是调用全局变量的析构函数?
这是C++,使用' cout',而不是'printf',加上'return 0; '在'main'中,初始化'default'构造函数中的''''然后重试。我并不熟悉NDK和android,但它仍然是C++ –
@KirilKirov printf没有任何问题。 cout的问题在于它依赖于可能在对象之前被解构的对象。 – Pubby
您是否尝试过使用GCC的'constructor'和'destructor'函数属性?如果你不能让你的班级工作,那么也许那些会。 – Pubby