我最近在使用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。但这种行为并不是我的预期。当进程退出并且系统试图释放所有对象时,是不是调用了全局变量的析构函数?
答案 0 :(得分:2)
当他们的进程在卸载模块/ dll时关闭或时,会破坏全局变量。
我假设您的问题在于如何使用NDK注册模块,听起来您的代码要么不像您假设的那样被声明为全局变量(即它实际上被调用到范围内) ),或者正在加载,卸载模块,然后以某种方式调用你的函数。
看看SDK中的一些NDK示例,看看你是否做了一些非常基本的错误;因为你的代码很好。
答案 1 :(得分:1)
class ClassP
{
public:
~ClassP();
int number;
};
ClassP::~ClassP()
{
printf("number=%d", number);
}
// global variable
ClassP p_instance;
int main()
{
printf("test");
}
添加缺少的分号
课后def和课后析构函数和 并且析构函数运行良好
Ps output = testnumber = 0