Недавно я столкнулся со странной проблемой при компиляции консольной программы 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 каким-то образом освобождается до вызова деструктора. Но поведение не то, что я ожидал. Разве деструктор глобальных переменных не вызывается, когда процесс завершается и система пытается освободить все объекты?
cout
вместоprintf
, добавьтеreturn 0;
вmain
, инициализируйтеnumber
вdefault constructor
и повторите попытку. Я вообще не знаком с NDK и андроидом, но это все же C++ - person Kiril Kirov   schedule 21.10.2011constructor
иdestructor
GCC? Если вы не можете заставить свой класс работать, то, возможно, они смогут. - person Pubby   schedule 21.10.2011