我最近在使用 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被某种方式释放了。但行为不是我所期望的。不是在进程退出时调用全局变量的析构函数,系统试图释放所有对象吗?
最佳答案
全局变量在其进程关闭时被销毁或在其模块/dll 被卸载时。
我假设你的问题是你如何使用 NDK 注册你的模块,听起来你的代码要么没有像你假设的那样被声明为全局变量(即它实际上被调用到一个范围),或者正在加载、卸载模块,然后以某种方式调用你的函数。
查看 SDK 中的一些 NDK 示例,看看您是否犯了一些非常基本的错误;因为您的代码目前还不错。
关于android - 什么时候在 NDK 中调用全局变量的 C++ 析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847474/