【发布时间】:2011-10-22 00:07:45
【问题描述】:
我最近在使用 NDK 编译 Android 控制台程序时遇到了一个奇怪的问题。
类是这样声明的:
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的析构函数时,其成员变量号的地址为0。我认为是因为p_instance在调用析构函数之前被某种方式释放了。但行为不是我所期望的。进程退出,系统试图释放所有对象时,不是调用全局变量的析构函数吗?
【问题讨论】:
-
这是 C++,使用
cout,而不是printf,在main中添加return 0;,在default constructor中初始化number,然后重试。对NDK和android一点都不熟悉,不过还是C++ -
@KirilKirov printf 没有问题。 cout 的问题在于它依赖的对象可能在你的对象被解构之前就被解构了。
-
您是否尝试过使用 GCC 的
constructor和destructor函数属性?如果你不能让你的班级开始工作,那么也许那些会。
标签: android c++ global-variables destructor android-ndk