Недавно я столкнулся со странной проблемой при компиляции консольной программы Android с использованием NDK.
Класс объявлен так:
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 каким-то образом освобождается до вызова деструктора.Но поведение не то, что я ожидал.Разве деструктор глобальных переменных не вызывается, когда процесс завершается, и система пытается освободить все объекты?