使用此指针的fltk回调问题

问题描述

void MainMenu::cb_userinput(fltk::Input *in,void *v)
{
    MainMenu *mm = (MainMenu*)v;
    memset(user_input,'\0',sizeof(user_input));
    strcpy((char*)user_input,in->value());
    in->value('\0');
    memset(user_input,sizeof(user_input));
    mm->ExitFromMenu();
}
void MainMenu::ExitFromMenu()
{
    Menu->clear();
    Menu->end();
}

我正在呼叫回叫的行

input->callback((fltk::Callback*)cb_userinput,this);

回调函数被成功调用,如果我从下面的函数删除了这两行,则我的程序运行成功,但是如果我同时使用了这两行,则程序会给出分段错误错误

void MainMenu::ExitFromMenu()
{
    //Menu->clear();
    //Menu->end();
}

我无法使用gdb,因为此程序正在远程设备上运行,有人可以帮助我找出问题吗?预先感谢。

全班

class MainMenu : public IUserOptions
{
    protected:
        Group *Menu;
        void displayUserOptions(); 
        static char user_input[3];
        static void cb_userinput(fltk::Input *in,void *v);
        int user_choice;
        void ExitFromMenu();
    public:
        MainMenu(vector<string> userChoices);
        int GetUserOption();
        ~MainMenu();
};

char MainMenu::user_input[3];
MainMenu::MainMenu(vector<string> userChoices) : IUserOptions(userChoices)
{
    Menu = new fltk::Group(0,320,220,"");
}
void MainMenu::cb_userinput(fltk::Input *in,void *v)
{
    MainMenu *mm = (MainMenu*)v;
  memset(user_input,sizeof(user_input));
  strcpy((char*)user_input,sizeof(user_input));
    mm->ExitFromMenu();
}
void MainMenu::ExitFromMenu()
{
    Menu->clear();
    Menu->end();
}
void MainMenu::displayUserOptions()
{
    Menu->set_vertical();
    Menu->begin();

    fltk::Widget *Wel = new fltk::Widget(0,"");
    Wel->color((fltk::Color)0xf5751000);
    Wel->Box(fltk::FLAT_Box);

    fltk::Widget *MAIN_MENU_Box = new Widget(0,30,"Genus Power Vers 1.0.0");
    MAIN_MENU_Box->Box(FLAT_Box);
    MAIN_MENU_Box->color((fltk::Color)0x6E040600);
    MAIN_MENU_Box->labelfont(fltk::TIMES_BOLD);
    MAIN_MENU_Box->labelsize(20);
    MAIN_MENU_Box->labelcolor(WHITE);

    // first Menu Option Download Meter
    fltk::Button *mb1= new fltk::Button(10,40,200," 1. Download ");//60
    mb1->labelfont(fltk::TIMES_BOLD);
    mb1->labelsize(16);
    mb1->argument(1);
    mb1->take_focus();
    mb1->color((fltk::Color)0x6E040600);
    mb1->align(fltk::ALIGN_CENTER);
    mb1->labelcolor(WHITE);
    mb1->Box(ROUNDED_Box);

  fltk::Input* input = new fltk::Input(400,60,120,25,"key :");
  input->labelsize(14);
  input->callback((fltk::Callback*)cb_userinput,this);
  input->take_focus();
  input->argument(2);
  input->labelfont(HELVETICA_BOLD_ITALIC);
  input->textsize(14);
  input->textfont(fltk::COURIER_BOLD);
  input->when(fltk::WHEN_ENTER_KEY_CHANGED);


    // Second Menu Option to Print
    fltk::Button *mb2= new fltk::Button(10,80," 0. Quit ");//60
    mb2->labelfont(fltk::TIMES_BOLD);
    mb2->labelsize(16);
    mb2->color((fltk::Color)0x6E040600);
    mb2->align(fltk::ALIGN_CENTER);
    mb2->labelcolor(WHITE);
    mb2->Box(ROUNDED_Box);



    Menu->end();
}
int MainMenu::GetUserOption()
{
    cout << endl << "Address of this:" << this << endl;
    getchar();  
    displayUserOptions();
     
    return user_choice;
}
MainMenu::~MainMenu()
{   
    delete Menu;
}

我的基类是

class IUserOptions
{
    protected:
        vector<string> UserChoices;
    public:
        IUserOptions(vector<string> userChoices);
        virtual int GetUserOption() = 0;
        virtual ~IUserOptions();
};

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)