其他分享
首页 > 其他分享> > 何时在NDK中为全局变量调用C析构函数?

何时在NDK中为全局变量调用C析构函数?

作者:互联网

我最近在使用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示例,看看您是否在做一些非常基本的错误.因为您的代码就可以了.

标签:destructor,global-variables,android-ndk,c-4,android
来源: https://codeday.me/bug/20191202/2086592.html