android - 什么时候在 NDK 中调用全局变量的 C++ 析构函数?

标签 android c++ global-variables destructor android-ndk

我最近在使用 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/

相关文章:

C++ - 使用局部变量和全局变量时的不同并发行为

groovy - Groovy 中的全局常量

Javascript如何使函数/变量全局可用

android - NullPointerException在TextInputLayout上

c++ - 从 Canny 检测和标记端点

c++ - 目标文件中未解析的外部符号

c++ - 从 C++ 中的数字树 (trie) 中查找最长的单词

android - 无法将 LG G6 连接到 ADB

android - 将抽屉布局添加到主要 Activity 中

java - 无法解释来自 GCM 的消息